˳
来自「用递归实现的二分法」· 代码 · 共 56 行
TXT
56 行
#include<stdio.h>
#define nu 20
#include<malloc.h>
typedef struct
{
int r[nu];
int length; // length为表中元素的个数
}RecordList;
RecordList *SqLset( )
{
RecordList *L;
int i=0,a;
L=(RecordList *)malloc(sizeof(RecordList));
printf("输入一个整型有序序列,输入0时结束!");
scanf("%d", &a); //输入一个整数
L->length=0;
while(a!=0) { //整数0为输入结束标志,输入一个有序的整数序列
L->r[i]=a ;
L->length++; i++;
if(L->length==nu-1) break;
else scanf("%d", &a);
}
return L;
}
int BinSrch(RecordList *L,int k, int low, int high)
{
//在有序表L中二分查找其关键字等于k的元素,
int mid;
if(low > high) return -1;
else if(low<=high)
{ mid=(low+high)/2;
if ( (L->r[mid]==k)||(L->r[mid-1]==k)||(L->r[mid+1]==k)) //找到待查元素
return mid;
else if(k<L->r[mid])
return BinSrch(L,k,mid-1,high);
else if(k>L->r[mid])
return BinSrch(L,k,low,mid-1);
}
}
void main()
{int m;
RecordList *A;
int k, low, high;
A=SqLset( );
low = 0; high = A->length-1;
printf("请输入你想查找的元素:");
scanf("%d", &k); //输入待查元素
m = BinSrch(A, k, low, high);
if(m==-1)
printf("查找不成功!");
else printf("m=%d, 查找成功!", m);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?