使用Python和C語言實現二分法查找(折半查找)

2020-12-04 軟體設計師天涯雨

二分查找 叫折半查找,它對要查找的序列有兩個要求,一是該序列必須是有序的,二是該序列必須是順序存儲的。

二分法查找算法的原理如下:

1、 如果待查對象為空返回-1,表示查找不到目標元素

2、 如果待查序列不為空,則將中間元素與要查找的目標元素進行匹配看是否相等,如果相等表示 查找成功,返回該中間元素的索引

如果不相等再比較這兩個元素的大小

3、 如果該中間元素大於目標元素,則將當前序列的前半部分作為新的待查序列

4、 如果該中間元素小於目標元素,則將當前序列的後半部分作為新的待查序列

5、 在新的待查序列上重新開始第1步的工作

一、使用C語言實現折半查找算法

#include <stdio.h>

/**

* @brief binarySearch

* @param a:待查找序列

* @param n:數組元素個數

* @param target:待查找目標元素

* @return:失敗返回-1,成功返回數組索引

*/

int binarySearch(int a[] ,int n ,int target){

int mid , low = 0 , high = n - 1;

while(low <= high){

mid = ( low + high )/2;

if(a[mid] == target){

return mid;

}else if(a[mid] > target){

high = mid - 1;

}else{

low = mid + 1;

}

}

return -1;

}

int main(void)

{

int a[] = {1,3,6,12,21,29,31,46,57,88,99};

int index = binarySearch(a ,11 ,88);

printf("index = %d",index );

return 0;

二、使用Python語言實現折半查找算法

由於很多小夥伴都在學Python,為了練習算法的思想及其Python的語法規則,請大家仔細使用Python練習二分法查找算法的這個題目。相關Python實現如下:

# @brief binarySearch

#@param a:待查找序列

#@param n:數組元素個數

#@param target:待查找目標元素

# @return:失敗返回-1,成功返回數組索引

def binarySearch(a , n , target):

mid = 0

low = 0

high = n - 1

while low <= high :

mid = (low + high) /2

# 將浮點型轉換為整型

mid = int(mid)

if a[mid] == target:

return mid

elif a[mid] > target:

high = mid - 1

else:

low = mid + 1

return -1

a = [1,3,6,12,21,29,31,46,57,88,99];

index = binarySearch(a ,11 ,88);

print( index )

相關焦點

  • JAVA編程——二分法查找
    一、二分法檢索過程二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設數組中的元素從小到大有序地存放在數組(array)中(註:二分法查找的關鍵,首先數組元素必須從小到大有序排列),(1)首先將給定值 key 與數組中間位置上元素的關鍵碼(key)比較,如果相等,則檢索成功
  • 二分查找會更快嗎?Python中的二分查找與線性查找性能測試
    如果在包含11個元素的列表中進行線性查找,則必須遍歷所有11個元素。 如果您使用二分查找,最終可能要進行2次迭代,具體取決於您要查找的內容。 請參見下面的圖形。顯而易見,哪種方法更快。開始學習Python時,您很可能已經使用了一百次列表。
  • OpenCV-Python 直方圖-1:查找、繪製和分析|二十六
    目標學會使用OpenCV和Numpy函數查找直方圖使用OpenCV和Matplotlib函數繪製直方圖你將看到以下函數:cv.calcHist(),np.histogramOpenCV中的直方圖計算因此,現在我們使用cv.calcHist()函數查找直方圖。
  • 二分查找法(折半查找法)
    /*二分查找法說明:如果搜尋的數列已經有排序,應該儘量利用它們已排序的特性,以減少搜尋比對的次數 ,這是搜尋的基本原
  • EXCEL之VBA應用實例-FIND查找和FindNext繼續查找的使用方法
    查找結果五查找參數與查找和替換對話框的關係Exit SubEnd IfDo 』開始循環查找,一般使用Do循環命令會在前面設置一個循環條件或在後面設置一個終止條件,我這裡前後都沒有設置,而是在中間對條件進行判斷,當查找結束就使用exit do命令退出do循環
  • C語言編程實例講解
    C語言三個數從小到大排序/輸出C語言猴子吃桃問題C語言百錢買百雞(百錢百雞,百雞問題)C語言漁夫打魚曬網問題C語言希爾排序算法C語言冒泡排序算法C語言直接插入排序算法C語言快速排序算法C語言選擇排序算法C語言歸併排序算法C語言二分查找算法,折半查找算法C語言分塊查找算法,索引順序查找算法C語言求
  • 科技:如何使用「查找我的iPhone」查找丟失的耳機
    導語:很高興大家來到這,今天小編和大家來講講對於蘋果AirPods,如何使用「查找我的iPhone」查找丟失的耳機,快來看看吧!在我們介紹如何找到丟失的Pod之前,您需要注意以下幾點:當充電盒打開或AirPods在盒子外面時,「查找我的iPhone」僅與您的AirPods交互。它們必須位於與iCloud帳戶綁定的iOS設備的藍牙範圍內,才能使當前位置和播放聲音功能正常工作。如果iOS設備不在丟失的AirPod範圍內,「查找我的iPhone」將顯示最後的已知位置。
  • 算法分析——二分法查詢
    題目 假設在一個已經排好序的有序序列(N個元素,升序排列),使用二分法進行查詢(使用遞歸實現) 原文收錄在 公眾號 慕陽源碼 感興趣或者有問題的小夥伴 聯繫我哦
  • R語言-stringr-字符串處理
    單雙引號R語言中字符串輸入時,可以使用單引號,也可以使用雙引號。()按照指定pattern(正則表達式)查找字符.重點困難點正則表達式的編寫.#原文來源烽火戲諸侯的<劍來>strings <- c('陳平安放下新折的那根桃枝,吹滅蠟燭,走出屋子後,坐在臺階上,仰頭望去,星空璀璨.')
  • 使用OpenCV和Python構建自己的車輛檢測模型
    我們人類可以很容易地在一瞬間從複雜的場景中檢測和識別出物體。然而,將這種思維過程轉化為機器的思維,需要我們學習使用計算機視覺算法進行目標檢測。因此在本文中,我們將建立一個自動車輛檢測器和計數器模型。以下視頻是你可以期待的體驗:https://youtu.be/C_iZ2yivskE注意:還不懂深度學習和計算機視覺的新概念?
  • 面試手撕算法系列:二分法
    最近春招開始了,面試面著面著一言不合就開始手撕代碼手撕就手撕,接下來我打算寫幾個專題講講面試中手撕的常見題目 這些都是LeetCode上有的題目 手撕無非就是 樹、鍊表、二分、字符串這些常用的數據結構二分法查找,也稱為折半法,是一種在有序數組中查找特定元素的搜索算法。
  • Excel中查找函數vlookup和index—match使用方法詳細介紹
    因為vlookup函數符合我們的思維習慣,在日常查找中足夠使用了。vlookup函數有四個參數,函數公式=vlookup(查找依據,查找範圍,查找值在查找範圍的列數,精確匹配或模糊匹配)。二:index—match函數相對於vlookup函數,index——match函數嵌套可以實現更多方式的查找。比如在反向查找,多條件查找中,利用vlookup函數查找就會比較複雜。而利用index—match函數進行查找就沒有太大區別。
  • 入門計算機必會的算法——二分查找法
    1、引言筆者對於計算機的研究一直停滯不前,近期想對一些算法進行複習和進一步的研究,每天都會更新一個新的算法,算法有難有易,層層遞進。不希望能學得有多麼高深,只希望在一些最基本的算法上有編碼的思路,或者在一些生產環境中會應用一些算法來解決實際問題。
  • Python數據類型串講(中)
    python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。
  • 算法競賽小專題系列(1):二分法、三分法
    清華大學出版社二分法和三分法是算法競賽中常見的算法思路,本文介紹了它們的理論背景、模板代碼、典型題目。1. 二分法的理論背景在《計算方法》教材中,關於非線性方程的求根問題,有一種是二分法。  二分法:如果確定f(x)在區間[a, b]內連續,且f(a) ∙ f(b) < 0,則至少有一個實根。二分法的操作,就是把[a, b]逐次分半,檢查每次分半後區間兩端點函數值符號的變化,確定有根的區間。  什麼情況下用二分?兩個條件:上下界[a, b]確定、函數在[a, b]內單調。
  • 論文文獻去哪裡查找?怎麼查找?
    論文文獻去哪裡查找?怎麼查找?如何高效地從閱讀的文獻中獲取需要的知識和內容?作為論文服務平臺小編為您總結了一下幾種查找文獻的方法和渠道,有疑問的朋友可以做下參考:論文文獻怎麼查找如果您還是學生如果您是職場人員,可以通過網絡查找,使用次數比較多的就是知網、萬方和維普。在知網、萬方和維普官網的檢索頁面有相應的檢索功能。如圖:可以充分利用關鍵詞、時間範圍等檢索條件進行精準檢索。如果沒有這些檢索平臺的帳號,不能下載到PDF格式的文件,只能是望洋興嘆。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • 電腦如何實現查找「附近的人」?
    當我們打開微信的附近的人可以看到附近的朋友,當我們打開美團附近的商家可以查找附近的飯店、影院等等。所有這一切都離不開一個功能:基於LBS的「附近的」功能,那計算機是如何實現這種功能的?本文討論一下其原理。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • Excel VBA函數篇-3.19大數據時代必備查找技能 萬條數據能奈我何
    前景提要經常看電視或者是一些招聘信息的童鞋,應該就比較熟悉大數據這個概念,大數據簡單的理解就是非常龐大的數據處理,數據量的提升,最直接的結果就是普通的數據處理方法越來越慢了,現在也是推出了很多種針對大數據處理的語言,比方說比較火熱的python,他的pandas模塊,numpy模塊,完全就是為大數據而生的,說到這裡肯定很多童鞋就方了,那麼excel是不是就沒有用處了呢