1、什麼是二分查詢演算法?
首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
2、使用二分查詢的序列必須是有序的
def find(l, aim, start=0, end=none):
""":param l: 目標列表
:param aim: 目標元素
:param start: 序列索引開始
:param end: 序列索引結束
:return: 目標元素的下標
"""end = len(l) if end == none else end #這裡做乙個判斷,如果end此時為none則返回len(l)否則就返回end
aim_index = (end - start) // 2 + start #這裡獲取中間位置
if start <= end:
if l[aim_index] > aim:
return find(l, aim, start=start, end=aim_index-1)
elif l[aim_index] < aim:
return find(l, aim, start=aim_index+1, end=end)
else:
return aim_index
else:
return "找不到這個值"
l = [2, 3, 4, 5, 10, 15, 16, 18, 22, 26, 33, 35, 38, 43, 46, 47, 50, 55, 56, 66, 67, 68, 69, 75, 77, 78, 83, 85, 88]
print(find(l, 66))
print(find(l, 41))
>>>
19找不到這個值
二分查詢(遞迴實現)
include include intk int binarysearch int a,int x,int low,int high a表示需要二分的有序陣列 公升序 x表示需要查詢的數字,low,high表示高低位 int mid low high 2 if x a mid 找到x else if...
遞迴實現二分查詢
回文是一種字串,它正著讀和反著讀都是一樣的。比如level,eye都是回文。用迭代的方法可以很快地判斷乙個字串是否為回文。用遞迴的方法如何來實現呢?首先我們要考慮使用遞迴的兩個條件 include iostream include include string define max 100 usin...
遞迴法實現二分查詢
二分查詢是一種高效的查詢演算法 非遞迴二分查詢可參考此篇博文。演算法思想 1.選取乙個mid值,並在每次遞迴時重新整理mid值 2.if key 3.if key nums mid 則結束該次函式,使left移到mid 1,開始遞迴 4.if key nums mid 則找到指定的key值,retu...