二分查詢演算法是一種非常常用而且筆試很容易考到的演算法,但是演算法導論這本書上居然沒有講到,在這裡寫一篇blog做個記錄
def search(a, p, r, key):
if p > r:
return false
q = (p + r) // 2
if a[q] == key:
return q
elif a[q] > key:
return search(a, p, q - 1, key)
else:
return search(a, q + 1, r, key)
def main():
a = list(range(0, 100))
print(a)
print(search(a, 0, len(a) - 1, -1))
if __name__ == '__main__':
main()
def search(a, p, r):
if not a:
return false
mid = (p + r) // 2
if p + 1 == r:
if a[p] > a[r]:
return r
else:
return p
if a[mid] < a[p]:
return search(a, p, mid)
else:
return search(a, mid, r)
def main():
a = list(range(100))
for i in range(-100, 0):
x = search(a, 0, len(a) - 1)
print(x, a[x])
if '__main__' == __name__:
main()
翻轉陣列相關的都可以找到最小值以後轉化為經典演算法 二分查詢及其變式
對於在有序的向量可以使用二分查詢的方法,在log n log n log n 的時間複雜度內完成查詢。應當指出二分查詢必須基於 有序 的前提條件。在乙個陣列中,查詢乙個數字的基本程式如下所示。int binary search const vector int nums,int target ret...
二分查詢演算法及其變種
前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...
二分查詢演算法及其變種
前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...