日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:誠摯的喬治 ? 更新時間: 2022-04-16 編程語言

問題:在有序數組中查找給定元素的下標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;
}

原文鏈接:https://z-ming.blog.csdn.net/article/details/122022207

欄目分類
最近更新