二分查找
在上篇博客中,小智给大家介绍了快速排序的事项,不知道大家有没有学会呢,既然都已经排好顺序了,那么不妨来查找查找我们需要的数据。
那就是这篇博客小智要介绍的二分查找。
二分查找,顾名思义是分成两部分,每查找一次数据减半,听起来速度应该很快吧,
但是它有一个前提:数据是排序好的,所以在使用二分查找时最好能使用好快排,将数组顺序排好。
那么二分查找到底如何实现呢,
(a).设置两个变量low、high,查找开始的时候:Iow=0,high=N-1;(N为数组长度)
(b)设置变量mid,mid为所查数组范围的中间位置,即mid=(low+high)/2;
(c)比较所要查询的数据number与a[mid],
(1)如果number等于a[mid],找到数据,跳出循环;
(2)如果number小于a[mid],将查找范围锁定在mid左边,即high=mid-1;
(3)如果number大于a[mid],将查找范围锁定在mid右边,即low=mid+1;
(d) 重复c,直到low>high;
具体代码如下:
#include<stdio.h>
#define N 10
void Search(int a[],int number)
{
int mid,found=0;
int low,high;
low=0;high=N-1;
while(low<=high)
{
mid=(low+high)/2;
if(number==a[mid])
found=1;
else
{
if(number<a[mid])
high=mid-1;
else
low=mid+1;
}
if(found==1)
{
printf("%d is the %d\n",number,mid+1);
return ;
}
}
printf("There is not %d\n",number);
}
int main(void)
{
int a[N]={10,20,30,40,50,60,70,80,90,100};
int number ;
printf("Please input you want to search number:");
scanf("%d",&number);
Search(a,number);
return 0;
}