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

一篇文章帶你了解C語言二分查找的簡單應(yīng)用

 更新時(shí)間:2021年08月31日 15:02:29   作者:Outsider373  
這篇文章主要介紹了二分查找算法在C語言程序中的使用示例,文中最后提到了使用二分查找法一個(gè)需要注意的地方,需要的朋友可以參考下

前言

在有序數(shù)組中查找具體的某個(gè)數(shù)字n,可能有同學(xué)會說一個(gè)一個(gè)找,但是這樣的效率實(shí)在太低,特別是對于有序的數(shù)組,效率太低。我們一般從中間元素開始找,查一次去掉一半數(shù)字,這種方法我們給它取名為折半查找即為二分查找,效率大大提高!怎么理解呢?如果有2的32次方個(gè)數(shù)字,我們最多只需查找32次,而一個(gè)一個(gè)數(shù)運(yùn)氣不好卻是2的32次方次。

實(shí)戰(zhàn)演練

這里我們先給出所寫代碼以及運(yùn)行結(jié)果 

 

在這里,給大家分析一下,首先,我們先創(chuàng)建一個(gè)有序數(shù)組arr[],然后我們把要查找的7用int k表示,我們要確定這組數(shù)組的左下標(biāo)0,右下標(biāo)為sz-1,sz為數(shù)組的元素個(gè)數(shù),即int left = 0,int right = sz-1;我們還要計(jì)算一下數(shù)組的元素總個(gè)數(shù)int sz =sizeof(arr)/sizeof(arr[0]);然后我們還需找出平均值int mid,如果arr[mid] < k,此時(shí)左下標(biāo)left = mid+1,當(dāng)arr[mid] > k,右下標(biāo)right = mid-1,最后只剩一種情況直接打印break;出我們要求的mid,但是這只是一次查找,但是真正的二分查找需要好多次,那我們就需要讓它循環(huán)while起來,需要一個(gè)條件left<=right,這說明中間還有元素,直到我們找到,但是當(dāng)left>right時(shí),此時(shí)我們可以大膽說明找不到,具體的代碼如上圖所示,這便是整個(gè)過程。小伙伴們趕緊int main(),return 0;敲起來試一試吧。

在這里,我在介紹另一種方法,通過函數(shù)的調(diào)用實(shí)現(xiàn)我們的二分查法。

 這里的思路主要跟上一種方法的思路差不多,在這里說明一下不能用0 == ret,雖然說0為假,非0為真,但是在這組數(shù)組中1的下標(biāo)就是為0,在這里提醒一下各位,另外,千萬不能不傳sz,即不能把int sz放在函數(shù)那一塊區(qū)域里求,這種寫法是有問題的,什么問題呢?這里簡單說明一下,問題在于此時(shí)求的sz不是10,而是1,為什么?數(shù)組arr傳參,實(shí)際傳遞的不是數(shù)組的本身,僅僅傳過去了數(shù)組首元素的地址,即為a的指針,實(shí)際上int a[]只是掛羊皮賣狗肉,本質(zhì)上是指針,所以在函數(shù)不能在函數(shù)內(nèi)部求,根本求不出元素個(gè)數(shù),另外,在int a []不需要寫數(shù)字大小,沒有意義,希望大家能夠理解,int a []并不會真正創(chuàng)建一個(gè)數(shù)組,大家一定要注意,未來如果我們遇到函數(shù)內(nèi)部需要參數(shù)部分傳過來元素個(gè)數(shù),一定是在外部求好元素個(gè)數(shù)的,大家一定要多加注意,即在函數(shù)內(nèi)部求元素個(gè)數(shù)是做不到的。

思路分析

最后,在這里總結(jié)一下思路,進(jìn)行思路分析,二分查找是要求所查找數(shù)組的順序必須是有序的,我們定義left為最左端的元素,right為最右端的元素,mid=(left+right)/2為數(shù)組的中間位置,然后用所查找的值的位置與mid所處的位置進(jìn)行比較,如果比mid小,只需在數(shù)組的前半部分查找,如果比mid大,在數(shù)組的后半部分查找,以此類推,直到查到到所尋找的值不在該數(shù)組為止,這便是整體的思路。

總結(jié)

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

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(134.加油站問題)

    C++實(shí)現(xiàn)LeetCode(134.加油站問題)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(134.加油站問題),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Cocos2d-x中背景音樂和音效使用實(shí)例

    Cocos2d-x中背景音樂和音效使用實(shí)例

    這篇文章主要介紹了Cocos2d-x中背景音樂和音效使用實(shí)例,注意本文中使用大量注釋來說明背景音樂和音效的使用方法,需要的朋友可以參考下
    2014-09-09
  • 解讀C++編程的相關(guān)文件操作

    解讀C++編程的相關(guān)文件操作

    這篇文章主要介紹了解讀C++編程的相關(guān)文件操作,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Qt連接數(shù)據(jù)庫并實(shí)現(xiàn)數(shù)據(jù)庫增刪改查的圖文教程

    Qt連接數(shù)據(jù)庫并實(shí)現(xiàn)數(shù)據(jù)庫增刪改查的圖文教程

    QT連接數(shù)據(jù)庫是應(yīng)用開發(fā)的常用基礎(chǔ)操作,經(jīng)過實(shí)驗(yàn)我總結(jié)了一些例程,下面這篇文章主要給大家介紹了關(guān)于Qt連接數(shù)據(jù)庫并實(shí)現(xiàn)數(shù)據(jù)庫增刪改查的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • C++命名空間5種常見用法實(shí)例解析

    C++命名空間5種常見用法實(shí)例解析

    這篇文章主要介紹了C++命名空間5種常見用法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C語言文件操作之fread函數(shù)詳解

    C語言文件操作之fread函數(shù)詳解

    fread()函數(shù)用來從指定文件中讀取塊數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于C語言文件操作之fread函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • C語言代碼實(shí)現(xiàn)簡單三子棋游戲

    C語言代碼實(shí)現(xiàn)簡單三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)簡單三子棋游戲,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言大小端字節(jié)序存儲模式深入解讀

    C語言大小端字節(jié)序存儲模式深入解讀

    我們知道,當(dāng)編譯器執(zhí)行 “創(chuàng)建變量” 這一代碼時(shí),會在內(nèi)存中開辟空間相應(yīng)的空間來存儲變量值。而對于整型變量而言,變量值又是以二進(jìn)制補(bǔ)碼的形式存放的
    2022-09-09
  • 詳解VSCode下C++環(huán)境配置過程

    詳解VSCode下C++環(huán)境配置過程

    這篇文章主要介紹了VSCode C++環(huán)境配置過程,在這大家需要在代碼的目錄下的.vscode文件夾下創(chuàng)建launch.json、tasks.json,具體實(shí)現(xiàn)過程跟隨小編一起看看吧
    2021-11-11
  • Visual Studio新建類從默認(rèn)internal改為public

    Visual Studio新建類從默認(rèn)internal改為public

    本文將介紹如何將Visual Studio中的internal修飾符更改為public,以實(shí)現(xiàn)更廣泛的訪問和重用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09

最新評論