C語言數據結構之二分法查找詳解

問題:在有序數組中查找給定元素的下標goal。

在查找一個數組元素的下標,可以用循環來解決,但是如果一個數足夠大,比如說手機的價格,用循環來查找,就相當於叫一個人猜,從0開始,需要猜很久。這時候就出現瞭二分查找,也叫對半查找。

對半查找顧名思義就是猜一次,下次猜的內容就減少一半             

這時候定義一個變量left表示最左邊元素的下標,在定義一個right表示最右邊元素的下標,而mid就表示中間元素的下標。

當中間值小於目標值,left重新定義。

if (mid < goal)
		{
			left = mid + 1;
		}

當中間值大於目標元素,right重新定義。

else if (mid > goal)
		{
			right = mid - 1;
		}

當中間元素等於目標元素時,打印即可。

else
		{
			printf("你找到瞭,下標為:%d", mid);
			break;
		}

這中查找方式可能會使用多次,這時候來一個while循環就可以重復查找的撒

如果最後數組元素找不到對應的元素,就在while循環外打印出找不到。

	if (left > right)
		printf("找不到");

最後代碼如下:

#include<stdio.h>//在數組中找到某個數,二分查找
int main()
{
	int goal = 7;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof arr[0];
	int left = 0; int right = sz - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (mid < goal)
		{
			left = mid + 1;
		}
 
		else if (mid > goal)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到瞭,下標為:%d", mid);
			break;
		}
	}
	if (left > right)
		printf("找不到");
	return 0;
}

到此這篇關於C語言數據結構之二分法查找詳解的文章就介紹到這瞭,更多相關C語言 二分法查找內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: