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

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

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

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

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

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

這時(shí)候定義一個(gè)變量left表示最左邊元素的下標(biāo),在定義一個(gè)right表示最右邊元素的下標(biāo),而mid就表示中間元素的下標(biāo)。

當(dāng)中間值小于目標(biāo)值,left重新定義。

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

當(dāng)中間值大于目標(biāo)元素,right重新定義。

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

當(dāng)中間元素等于目標(biāo)元素時(shí),打印即可。

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

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

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

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

最后代碼如下:

#include<stdio.h>//在數(shù)組中找到某個(gè)數(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("找到了,下標(biāo)為:%d", mid);
			break;
		}
	}
	if (left > right)
		printf("找不到");
	return 0;
}

到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之二分法查找詳解的文章就介紹到這了,更多相關(guān)C語言 二分法查找內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論