二分法查找的思想是,对于已经按照从小到大的顺序排列好的 N 个数据,取出排在中间位置的数据进行比较,如果等于要找的数则查找结束;如果比要找的数大,则要找的数据一定在左边部分,则在左边数据中继续用类似的方法查找;如果比要找的数小,则在右边数据中继续用类似的方法查找。在整个过程中,查找的数据范围每次都被分成两半,因而称为二分法查找。
例:在1 2 3 4 5 6 7 8 9 10 这几个数中找到6
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str[11]={1,2,3,4,5,6,7,8,9,10};
int f=1,l=10,mid;
int t;
scanf("%d",&t);
while(f<=l)
{
mid=(f+l)/2;
if(str[mid]>t)
l=mid-1;
else if(str[mid]<t)
f=mid+1;
else
{
printf("%d\n",t);
break;
}
}
return 0;
}
第一个数设为f,最后一个数设为l,中间的数为mid
首先找出中间数mid,mid与t(就是6)比较,6比5大,将5左边的数据全部抹去。
f移到6的位置,
继续找mid,mid=8,8比6大,将8左边的数据全部抹去。
l移到7的位置,
继续找mid,这时mid=6,t就找到了