DAY 006 查詢某個值是否在列表中 二分法)

2022-05-04 12:15:10 字數 3139 閱讀 2037

1、給定乙個num_list= [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

2、根據使用者輸入的值,判斷是否在num_list中

流程分析:

1、編寫乙個查詢函式,運用二分法+遞迴思想:

1.2、從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;

1.3、如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢(運用函式遞迴的思想),而且跟開始一樣從中間元素開始比較。

1.4、如果在某一步驟陣列為空,則代表找不到。

2、如何運用函式遞迴的思想?

3、如果找到了值,返回true,如果沒有找到,返回false

**分析:

def

binary_search_loop(lst,value):

low, high = 0, len(lst)-1

while low <=high:

mid = (low + high) // 2

if lst[mid] lst=lst[mid+1:]

return

binary_search_loop(lst,value)

elif lst[mid] >value:

lst =lst[:mid]

return

binary_search_loop(lst, value)

else

:

return

true

return

false

number_list = [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

defmain():

while

true:

num=input("

>>:

").strip()

try:

num=int(num)

except

:

raise typeerror("

請輸入數字")

ifbinary_search_loop(number_list,num):

print("

%d存在列表中

"%num)

else

:

print("

該值不存在")

if__name__=="

__main__":

main()

方法二流程分析:

1、編寫乙個查詢函式,運用二分法+迴圈思想:

1.2、從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;

1.3、如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢(運用迴圈的思想),而且跟開始一樣從中間元素開始比較。

1.4、如果在某一步驟陣列為空,則代表找不到。

2、如何運用迴圈的思想?

2、如果找到了值,返回true,如果沒有找到,返回false

方法二**:

def

binary_search_loop(lst,value):

low, high = 0, len(lst)-1

while low <=high:

mid = (low + high) // 2

if lst[mid] low = mid + 1

elif lst[mid] >value:

high = mid-1

else

:

return

true

return

false

number_list = [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

defmain():

while

true:

num=input("

>>:

").strip()

try:

num=int(num)

except

:

raise typeerror("

請輸入數字")

ifbinary_search_loop(number_list,num):

print("

%d存在列表中

"%num)

else

:

print("

該值不存在")

if__name__=="

__main__":

main()

題目反思:

1、本題還可以用for迴圈查詢的,但是使用for迴圈容易造成查詢速度慢,如果資料量過大,for迴圈肯定不能使用

2、在使用二分法+遞迴中,要考慮到

3、我做題過程中的bug主要有兩個:

4、在搜尋資料中,還看見了二分法迴圈實現,然後自己照著二分法+迴圈的方法實現了本題,根據程式的執行,發現二分法迴圈更加節約查詢的時間。

新學知識點:

1、二分法概念

2、二分法實現方法:遞迴、迴圈

3、又一次使用了遞迴,加深了一點對遞迴的理解

4、二分法+迴圈是很好的解題思想,記住這道題!

mark on 2018.04.09

推斷某個值是否在某個範圍彙編優化

推斷某個值是否在某個範圍是否在某個區間範圍的 是經經常使用到的,處理是否超出某個邊界範圍的時候。我畫素點設定為零。否僅僅做點別的 在這個過程中,我們可能要進行一次飽和處理,於是乎寫以下的 if val 0 val 256 else 於是乎我就寫了以下這樣乙個函式來討論我們的問題 int32 t is...

如何高效的查詢陣列中是否包含某個值

一 有四種方式查詢陣列中是否包含某個值 1 使用list public static boolean uselist string arr,string targetvalue 2 使用set public static boolean useset string arr,string target...

如何使用MySQL查詢某個列中相同值的數量統計

資料現在是這樣的,我想確定出type列中的news和image。ktsqx。甚至以後有其他值ktsqx,他們分別有多少個。select type,count 1 as counts 程式設計客棧from material group by type cowww.cppcns.comunt 1 代表統...