适用情况:在一批有序数据中查找某数
思想:C语言中的二分法和我们数学上学习的二分法是一样的,找到一批数中间的一个数与所查数比较,看是否为你想找的数,如果不是,将找到的数和你需要找的数进行比较,判断在之前还是在之后,从而达到缩小一半范围的效果,之后用同样的方法在每个区域查找,知道你找到需要的数
例题:假设,在数组中的数据是按从小到大的顺序排列的,从键盘上输入一个数,判断该数是否在数组中,如果在的话,则输出所在的序号。
TIPS:
设low,,mid,high这三个变量,分别指示数列中的起始元素,中间元素和最后一个元素,并且赋值,low=0,mid=4,high=9,(C语言中除法小数点后是忽略的),判断mid代表的数是否为所求,如果不是继续查找。然后确定新的区间,继续上面操作,直到找到为止
#define M 10
#include<stdio.h>
int main()
{
static int a[M] = { -12,0,6,16,23,56,80,100,110,115 };
int n, low, mid, high, found;
low = 0;
high = M - 1;
found = 0;
printf("Input a number to be searched:");
scanf("%d", &n);
while (low <= high)
{
mid = (low + high) / 2;
if (n == a[mid])
{
found = 1; break;
}/*找到,结束循环*/
else if (n > a[mid])
low = mid + 1;
else
high = mid - 1;
}
if (found == 1)
printf("The index of %d is %d", n, mid);
else
printf("There is not %d", n);
}