二分查詢binary search的思想:
以有序表表示靜態查詢表時,查詢函式可以用二分查詢來實現。
二分查詢(binary search)的查詢過程是:先確定待查記程式設計客棧錄所在的區間,然後逐步縮小區間直到找到或找不到該記錄為止。
1二分查詢的時間複雜度是o(log(n)),最壞情況下的時間複雜度是o(n)。
假設 low 指向區間下界,high 指向區間上界,mid 指向區間的中間位置,則 mid = (low + high) / 2;
具體過程:
1.先將關鍵字與 mid 指向的元素比較,如果相等則返回mid。
2.關鍵字小於 mid 指向的元素關鍵字,則在 [ low, mid-1 ]區間中繼續進行二分查詢。
3.關鍵字大於m 指向的元素關鍵字,則在[ mid +1 , high] 區czgiasmam間中繼續進行二分查詢。
用python實現二分查詢示例:
>>> def find(self, num):
l = len(self)
first = 0
end = l - 1
mid = 0
if l == 0:
self.insert(0,num)
return false
while first < end:
mid = (first + end)/2
if num > self[mid]:
first = mid + 1
elifwww.cppcns.com num < self[mid]:
end = mid - 1
else:
break
if first == end:
if self[first] > num:
self.insert(first, num)
return false
elif self[first] < num:
self.insert(first + 1, num)
return false
else:
return true
elif first > end:
self.insert(first, num)
return false
else:
return true
>&czgiasmamgt;> list_d = ['a','b','c','d','e','f','d','t']
>>> value_d = 't'
>>> aa=find(list_d,value_d)
>>> aa
true
>>> value_d='ha'
>>> aa=find(list_d,value_d)
>>> aa
false
本文位址:
二分查詢相關
題目1.左旋陣列中的查詢 附 字串左旋方法 的題目2 解法 將這個問題可以分解成子問題。要是帶查詢值落在單調有序區,那就直接二分查詢了,落在左旋陣列區,就遞迴查詢。也可以把它簡化成乙個遞迴,就用fun,不用bs是一樣的。題目2.左旋陣列中的最小值 止條件,當陣列最後剩下兩個數的時候,這就是最小規模了...
二分查詢相關
題目1.左旋陣列中的查詢 附 字串左旋方法 的題目2 解法 將這個問題可以分解成子問題。要是帶查詢值落在單調有序區,那就直接二分查詢了,落在左旋陣列區,就遞迴查詢。也可以把它簡化成乙個遞迴,就用fun,不用bs是一樣的。題目2.左旋陣列中的最小值 止條件,當陣列最後剩下兩個數的時候,這就是最小規模了...
順序查詢與二分查詢演算法
順序查詢演算法 順序查詢是非常簡單常用的查詢演算法,基本思路 從第乙個元素m開始逐個與需要查詢的元素x進行比較,當比較到元素值相同 即m x 時返回元素m的下標,如果比較到最後都沒有找到,則返回 1。該演算法的時間複雜度為o n 如果資料量很大時查詢效率會很低。1 include23 順序查詢演算法...