#二分法查詢可以提高效率, 前提條件: 有序序列
#二分法:
核心思想: 掐頭去尾取中間, 一次砍一半.
兩種演算法: 常規迴圈, 遞迴迴圈(返回值要返回給上乙個)
#常規迴圈
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 66left = 0 #
左邊界 right = len(lst) - 1 #
右邊界while left <= right: #
邊界, 當右邊比左邊還小的時候退出迴圈
mid = (left + right)//2 #
必須是整除. 因為索引沒有小數
if lst[mid] >n:
right = mid - 1 #
不出現在右邊界,把右邊界變成現在的中間並且向左移一位
if lst[mid] left = mid + 1 #
不出現在左邊界,把右邊界變成現在的中間並且向右移一位
if lst[mid] ==n:
print("
找到了這個數")
break
else
:
print("
沒有這個數")
#遞迴迴圈
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
deffunc(n, left, right):
if left <=right:
mid = (left + right)//2
if n > lst[mid]: #
在右邊 left = mid + 1 #
把左邊界變成mid,然後右移一位
#個人理解: 一層一層函式遞迴進去,但是結果也要一層一層返回回來到第一層
return func(n, left, right) #
遞迴 遞迴的入口
if n < lst[mid]: #
在左邊 right = mid - 1 #
把右邊界mid,然後左移一位
#深坑. 函式的返回值返回給呼叫者
return func(n, left, right) #
遞迴if n ==lst[mid]:
print("
找到了"
)
return mid #
通過return返回, 終止遞迴
#return # 通過return返回. 終止遞迴
else
:
print("
沒有這個數
") #
遞迴的出口
return -1 #
1, 索引+ 2, 什麼都不返回, none(避免返回none)
#找66, 左邊界:0, 右邊界是:len(lst) - 1
print(func(63, 0, len(lst)-1))
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
二分法查詢
前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...