二分檢索 BinarySearch

 這是個很神奇的東東.... 找數組裏存不存在想要的元素。
#include <stdio.h>
#include <stdlib.h>

int m;                                         		 //數組長度爲m 
int n[100];                                    		 //全局變量 

int main()
{
	int BinarySearch(int x);                           
	int t,i,a;
	scanf("%d", &m);
	for (i=0; i<m; i++)
	{
		scanf("%d", &n[i]);                            //遞增序列 ,若不是的話,可以用sort()將之排序
	}
	scanf("%d" ,&t);
	a = BinarySearch(t);                                    //檢索對象 比如“8”
	if(a != -1)
	{
		printf("%d",BinarySearch(t)+1);
	}
	else
	{
		printf("Can't find it!\n");
	}
	system("pause");
	return 0;
	
}

int BinarySearch(int x)                                //二分檢索 
{
	int a,b,mid;                                    //區間(a,b)爲端點,mid爲中間值 
	a = 0;                                          //由數組n初始化,a=0 
	b = m - 1;        								//由數組n初始化,b=m-1; 
	
	while(a <= b)                                    //當區間不爲0時循環 ,直到檢到a=b 
	{
        mid = (a + b)/2;
        
		if (x == n[mid])                            //若正好要檢索值等於中間值,返回mid,x=mid; 
		{
			return mid;
		}
		if (x>n[mid])                               //若比中間值大,則區間下界a從mid+1開始 
		{
			a = mid+1;
		}
		else                                         //若比中間直銷,則區間上界b從mid-1開始 
		{
			b = mid-1;
		}
	}
	return(-1);                                       //若檢索不到,則返回-1,x=-1 
}

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