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
**分析:
defbinary_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
方法二**:
defbinary_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 代表統...