问题:N个有序整数数列已经放在一堆数组中,利用二分查找法,查找整数m在数组中的位置,若找到则输出其下标值,反之则输出“not be founded”。
分析:首先定义整型变量,low,high,k,mid,其中low=0,high=N-1,k可以随便赋值一个小于0的数,输入所要查找的数m、,根据题干,这个数列是由小到大排列的,在while循环中,mid=(low+high)/2;if(m<a[mid]),令high=mid-1,else if(m>a[mid]),else if(m==a[mid]),令k=mid,最后判断k是否大于0,输出mid或not be founded。
#include<stdio.h>
#define N 10
int main()
{
int a[N]={1,22,33,44,55,66,79,556,665,777};
int mid,m,low=0,high=N-1,k=-10;
scanf("%d",&m);
while(low<=high)
{
mid=(low+high)/2;
if(m<a[mid])
{
high=mid-1;
}
else if(m>a[mid])
{
low=mid+1;
}
else if(m==a[mid])
{
k=mid;
break;
}
}
if(k>=0)
printf("%d",k);
else if(k<0)
printf("not found");
return 0;
}
标签:折半,mid,else,high,查找,low From: https://www.cnblogs.com/qian-heng/p/17338436.html