二分查找
在上篇博客中,小智給大家介紹了快速排序的事項,不知道大家有沒有學會呢,既然都已經排好順序了,那麼不妨來查找查找我們需要的數據。
那就是這篇博客小智要介紹的二分查找。
二分查找,顧名思義是分成兩部分,每查找一次數據減半,聽起來速度應該很快吧,
但是它有一個前提:數據是排序好的,所以在使用二分查找時最好能使用好快排,將數組順序排好。
那麼二分查找到底如何實現呢,
(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;
}