1. 程式人生 > >【C/C++】折半查詢(二分查詢)

【C/C++】折半查詢(二分查詢)

一、二分查詢

在C和C++裡,二分查詢是針對有序陣列所用的一種快速查詢元素的方法。

二、二分查詢的條件以及優缺點

條件:針對有序陣列(元素從小到大或從大到小) 優點:查詢速度較快,時間複雜度為O(n) 缺點:有硬性條件的限制,而且即使查到後,插入與刪除困難。

三、圖片詳解

 

四、二分查詢C語言程式碼塊(封裝後)

封裝函式解釋:

函式原型:binary_research(int arr[],int left , int right , int element) 函式功能:利用二分法查詢陣列元素 返回值    :若找到元素,返回元素陣列下標;否則,返回-1

程式碼塊:

int binary_research(int arr[],int left,int right,int element)
{
	while(left<=right)
	{	
		int mid = (left+right)/2;
		if(arr[mid]>element)
		{
			right = mid - 1;
		}
		else if(arr[mid]<element)
		{
			left = mid + 1;
		}
		else 
		{
			return mid;
		}
	}
	return -1;
}

主函式程式碼塊:

int main()
{	
	int array[] = {1,2,3,4,5,6,7,8,9};
	int right = <a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof(array)/sizeof(array[0]) - 1</a>;//利用<a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof</a>求陣列長度,-1後為右下標
	int left = 0;//定義右下標並初始化為0
	int element = 0;//定義查詢的元素並初始化為0
	printf("請輸入要查詢的元素>");
	scanf("%d",&element);
	int location = binary_research(array,left,right,element);
	if(location>=0)
		printf("The element's location is %d\n",location);
	else
		printf("Don't exit this element.\n");
	return 0;
} 

五、小結

二分查詢對有序陣列來說查詢速度快。 優化: 可以用 int mid = left - (left - right)/2; //防止越界

int mid = left&right+(left^right)>>1;//進行計算機最喜歡的位運算,效率略高

來代替  求兩個數的平均值的操作
---------------->>>sizeof列印陣列元素

----------------------->>>深入預處理