No 12遞迴函式實現二分查詢演算法

2021-08-21 13:02:43 字數 1023 閱讀 4380

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...