二分法查詢

2022-08-09 10:24:11 字數 1598 閱讀 1729

#

二分法查詢可以提高效率, 前提條件: 有序序列

#二分法:

核心思想: 掐頭去尾取中間, 一次砍一半.

兩種演算法: 常規迴圈, 遞迴迴圈(返回值要返回給上乙個)

#常規迴圈

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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...