欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言數(shù)據(jù)結構之二分法查找詳解

 更新時間:2022年02月10日 15:49:52   作者:誠摯的喬治  
二分查找算法是在有序數(shù)組中用到的較為頻繁的一種算法,在未接觸二分查找算法時,最通用的一種做法是,對數(shù)組進行遍歷,跟每個元素進行比較,其時間為O(n),但二分查找算法更優(yōu)

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

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

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

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

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

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

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

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

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

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

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

如果最后數(shù)組元素找不到對應的元素,就在while循環(huán)外打印出找不到。

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

最后代碼如下:

#include<stdio.h>//在數(shù)組中找到某個數(shù),二分查找
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語言數(shù)據(jù)結構之二分法查找詳解的文章就介紹到這了,更多相關C語言 二分法查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論