折半查找法
我自己对折半查找的理解
1:当要查找的那个数比中间数要大的时候,high不变,low就从mid+1开始逐渐接近high
2: 当要查找的那个数比中间数要小的时候,low不变,high就从mid-1开始逐渐接近low
3:当时我考虑的是,如果(high+low)/2为一个分数怎么办,整除不开,后来慢慢了解到,int类型是把小数点后面去掉的,
所以不用担心这些问题了,具体课本有解释,仔细研读。
明白这些之后,折半查找就容易做了
#include <stdio.h>
#define N 15
int main(void)
{
int a[N];
int low=0,high=N-1,mid,num,i;
printf("请输入十五个数:\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
printf("请输入要查找的数:\n");
scanf("%d",&num);
while(low<=high)
{
mid=(low+high)/2;
if(num>a[mid])
{
low=mid+1;
}
if(num<a[mid])
{
high=mid-1;
}
if(num==a[mid])
{
printf("%d是查找的元素,第%d个\n",num,(mid+1));//mid+1一定一定要加括号,否则你可以体会一下,找错找了半个小时,居然是这样错的。
break;
}
}
if(num!=a[mid])
{
printf("无此数!!!\n");
}
return 0;
}
printf("%d是查找的元素,第%d个\n",num,(mid+1));//mid+1一定一定要加括号,否则你可以体会一下,找错找了半个小时,居然是这样错的。加黑加粗为了引起你们的注意,别犯我这样的错