python中二分查詢

2021-09-07 04:15:13 字數 1226 閱讀 9082

二分查詢也稱折半查詢,它的效率較高。但是二分查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。

寫二分查詢時有兩個方法,乙個是用遞迴,乙個不用遞迴。

用遞迴的方法如下

#coding:utf-8

def binary_search(alist,item):

"""二分查詢。遞迴法"""

n = len(alist)

if n > 0:

mid = n//2

if alist[mid] == item:

return true

elif alist[mid] > item:

return binary_search(alist[:mid],item)

else:

return binary_search(alist[mid+1:],item)

return false

if __name__ == "__main__":

li = [17, 20, 26, 31, 44, 54, 55, 77, 93]

print(binary_search(li,55))

print(binary_search(li,521))

不用遞迴的方法寫法如下

#coding:utf-8

def binary_search_2(alist,item):

"""二分查詢。非遞迴方法"""

n = len(alist)

first = 0

last = n-1

while first <= last:

mid = (first + last) // 2

if alist[mid] ==item:

return true

elif alist[mid] < item:

first = mid+1

else:

last = mid-1

return false

if __name__ == "__main__":

li = [17, 20, 26, 31, 44, 54, 55, 77, 93]

print(binary_search_2(li, 55))

print(binary_search_2(li, 521))

二分查詢的最優時間複雜度是o(1)

最壞時間複雜度是o(logn)

Java中二分查詢

給定乙個陣列,我們要查詢當前資料在陣列中的位置,雖然可以使用迴圈乙個個遍歷,但是由於要使 執行時間盡可能的小,所以我們要採用二分法來查詢。先上 public class binarysearch else if k arr m else return 1 public static void mai...

STL中二分查詢

偶然遇到了一些問題,記錄一下 標頭檔案 include 1.binary search 查詢某個元素是否出現。函式原型 bool lower bound forwarditer first,forwarditer last,const tp val 函式功能 在陣列中以二分法檢索的方式查詢,若在陣列...

標準庫中二分查詢演算法

標準庫中二分搜尋演算法 每個演算法都提供兩個版本,第乙個版本用元素型別的小於運算子 來檢測元素,第二個版本則使用給定的比較操作。給定的比較操作可以是函式物件 lambda表示式 定義函式呼叫操作符類的物件。lower bound beg,end,val lower bound beg,end,val...