2012年(106)
分类: C/C++
2012-05-07 17:08:53
6、折半查找(升序)
思路:N个按照从小到大排列好顺序的数,再从中寻找一个数,不是依次扫描每个数,而是
先把这组数的中间元素拿出来与所找的数比较,如果中间数小于所找的数,则在这组数的后
半段寻找;如果中间数大于所找的数,则在这组数的前半段寻找。找到了,输出这个数的下
标,如果找不到,输出Notfound!。
完整程序
#include
#define N 10
int main()
{
int a[N],low=0,high=N-1,mid,i,key,flag=0;
for(i=0;i scanf("%d",&a[i]); scanf("%d",&key); while(low<=high) { mid=(low+high)/2; if(a[mid]==key) { printf("Found! The index if%d",mid); flag=1; break; } else if(a[mid]>key) high=mid-1; else low=mid+1; } if(!flag) printf("Not found!"); return 0; } 封装函数 int zheban(int a[N],key) { int low=0,high=N-1,mid; while(low<=high) { mid=(low+high)/2; if(a[mid]==key) { printf("Found! The index if%d",mid); return mid; } else if(a[mid]>key) high=mid-1; else low=mid+1; } printf("Not found!"); return -1; } 调用函数 #include #define N 10 int main() { int a[N],low=0,high=N-1,mid,i,key,flag=0; int zheban(int a[N],key); for(i=0;i scanf("%d",&a[i]); scanf("%d",&key); zheban(a,key); return 0; }