C语言折半查找(二分查找)
- 定义:对用户输入的数是否在已经按顺序定义好的一组数上进行查找
- 思想:
定义好的一组数必须按顺序排序,一般从小到大排序;
将一组数分为两个部分;low指第一个数,mid指中间一个数,high指第最后一个数;
把查找数n与mid比较;如果n>mid,说明在mid右侧,low的位置发生改变,除去当时low本身,则 low = mid+1;如果n<mid,说明在mid左侧,high的位置发生改变,除去当时high本身,则 high = mid-1;如此重复比较直到找到查找数n;
#include <stdio.h>
void main()
{
int a[10] = {-11, 0, 8,16,32,64,128,130,260,320};
int low,mid,high;
int n;
int flag = 0;
low = 0;
high = 10-1;
printf("输入让查找的数字");
scanf("%d",&n);
while(low<=high)
{
mid = (low + high)/2;
if(n==a[mid])
{
flag = 1;
break;
}
else if(n>a[mid])
{
low = mid+1;
}
else
{
high = mid-1;
}
}
if(flag==1)
{
printf("找到了:%d 下标数为%d\n",n,mid);
}
else
{
printf("%d\n",n);
}
}