二分查找

二分查找

在上篇博客中,小智給大家介紹了快速排序的事項,不知道大家有沒有學會呢,既然都已經排好順序了,那麼不妨來查找查找我們需要的數據。

那就是這篇博客小智要介紹的二分查找。

二分查找,顧名思義是分成兩部分,每查找一次數據減半,聽起來速度應該很快吧,

但是它有一個前提:數據是排序好的,所以在使用二分查找時最好能使用好快排,將數組順序排好。

那麼二分查找到底如何實現呢,

(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;
}


發佈了20 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章