最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解C語言二分查找

 更新時間:2021年08月25日 10:45:54   作者:ZDDWLIG  
這篇文章主要為大家詳細介紹了C語言二分查找法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

我們常常需要對數(shù)據(jù)進行查找,修改,查找數(shù)據(jù)有許多方法,我們先看看最簡單的順序查找

int main()
{
	int i, k = 0;
	scanf("%d", &k);
	int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		if (arr[i] == k)
		{
			printf("找到了,它是%d", arr[i]);
		}
	}
	return 0;
}

順序查找絕大多數(shù)情況有效但是由于它是一個一個元素進行查找,其效率很低,只有一個for循環(huán)所有其時間復雜度為O(n)。我們希望有一個更高效的查找方法,接下來便是二分查找,先來看看一個順序查找和二分查找的直觀比較。

從上面的圖中我們感受到二分查找的關鍵:找到最左邊元素(low)和最右邊元素(high),確定中間元素(mid),比較中間元素(mid)和目標元素(k)的大小,調整low和high,再確定新的mid....我們要不斷確定mid直到找到k,自然需要用到循環(huán),我們有明確的目標:找到k。因此選擇while循環(huán),找到k后循環(huán)不再進行,而當low和high之間還有元素,即low在high的左邊或與之重合,k就依然可能存在,所以循環(huán)條件為low<=high,接下來的問題在于怎樣調整low和high的值,mid和k比較無非就三種情況:mid<k,mid>k,mid=k。第一種情況,k在mid的右邊,我們將low調整為mid+1,high不用調整;第二種情況,k在mid的左邊,我們將high調整為mid-1,low不用調整。最后一種情況最簡單,我們已經(jīng)找到了k,直接將mid打印出來就行了,代碼如下:

#include <stdio.h>
int main()
{
	int k = 0;
	scanf("%d", &k);
	int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof (arr[0]);
	int low = 0;
	int high = sz-1;
	while (low <= high)
	{
		int mid = (low + high) / 2;
		if (arr[mid] > k)
		{
			high = mid - 1;
		}
		else if (arr[mid] < k)
		{
			low = mid + 1;
		}
		else
		{
			printf("找到了,它是:%d", arr[a]);
			break;
		}
	}
	if (l>r)
		printf("沒找到,請重新輸入");
	return 0;
}

二分查找的時間復雜度的問題:總共有n個元素,每次查找的區(qū)間大小就是n,n/2,n/4,…,n/2^k(接下來操作元素的剩余個數(shù)),其中k就是循環(huán)的次數(shù)。由于n/2^k取整后>=1,即令n/2^k=1,可得k=log2n,(是以2為底,n的對數(shù)),所以時間復雜度可以表示O(logn),確實比順序查找快不少,但是二分查找有一個較大的局限性:只能查找有序數(shù)組的元素,即組數(shù)字必須是升序或降序。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • Qt下監(jiān)測內(nèi)存泄漏的方法

    Qt下監(jiān)測內(nèi)存泄漏的方法

    在寫Qt應用程序時,由于是采用C++語言,經(jīng)常會碰到一個令人棘手的問題,那就是內(nèi)存泄漏,本文主要介紹了Qt下監(jiān)測內(nèi)存泄漏的方法,感興趣的可以了解一下
    2021-12-12
  • C語言?棧與數(shù)組的實現(xiàn)詳解

    C語言?棧與數(shù)組的實現(xiàn)詳解

    棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素
    2022-04-04
  • C語言實現(xiàn)簡易文本編譯器

    C語言實現(xiàn)簡易文本編譯器

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易文本編譯器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C/C++ 雙鏈表之逆序的實例詳解

    C/C++ 雙鏈表之逆序的實例詳解

    這篇文章主要介紹了C/C++ 雙鏈表之逆序的實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • C++深入分析講解函數(shù)與重載知識點

    C++深入分析講解函數(shù)與重載知識點

    C++?允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-06-06
  • C++的繼承和派生你了解嗎

    C++的繼承和派生你了解嗎

    這篇文章主要為大家詳細介紹了C++繼承和派生,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • OpenCV實現(xiàn)更改圖片顏色功能

    OpenCV實現(xiàn)更改圖片顏色功能

    這篇文章主要為大家詳細介紹了如何利用OpenCV實現(xiàn)更改圖片顏色的功能,文中代碼介紹詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C++繼承的定義與注意事項

    C++繼承的定義與注意事項

    這篇文章主要給大家介紹了關于C++繼承的定義與注意事項的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C語言例題之輸出1000以內(nèi)的所有完數(shù)

    C語言例題之輸出1000以內(nèi)的所有完數(shù)

    完數(shù)是一些特殊的自然數(shù),它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身,如果一個數(shù)恰好等于它的因子之和,則稱該數(shù)為“完數(shù)”,這篇文章主要給大家介紹了關于C語言例題之輸出1000以內(nèi)的所有完數(shù)的相關資料,需要的朋友可以參考下
    2022-11-11
  • 用C語言畫一個圓

    用C語言畫一個圓

    大家好,本篇文章主要講的是用C語言畫一個圓,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

舞钢市| 通州市| 富裕县| 贵南县| 屏南县| 山阳县| 聂荣县| 武宁县| 珠海市| 原平市| 安康市| 夏河县| 镇远县| 横峰县| 游戏| 新兴县| 新竹县| 宜都市| 临西县| 云浮市| 古浪县| 澎湖县| 准格尔旗| 鲁山县| 孝昌县| 岑巩县| 祁阳县| 乡城县| 罗山县| 漳浦县| 昌图县| 金昌市| 南宁市| 德清县| 克什克腾旗| 孟村| 青铜峡市| 汽车| 湄潭县| 余江县| 河东区|