代码如下, 定义好了 Binary
方法, 为什么执行后没有返回结果:
def Binary(t,a):
a.sort
low = 0
high = len(a) - 1
mid = (low + high) // 2
while low < high:
if t < a[mid]:
high = mid - 1
elif t==a[mid]:
print("t is the in a")
else:
low = high + 1
return
if __name__ == "__main__":
t = int(input("请输入一个数"))
a = list(range(1, 20))
Binary(t, a)
你的代碼問題太多了:
a.sort
是函數sort
對象, 由於你沒有調用所以也不會排序, 應當改為a.sort()
或a = sorted(a)
, 不過在不影響原始資料的前提下, 我們通常選擇後者的作法mid
的更新應該在while
內, 否則不管low
或是high
怎麼變動, 你都是在測試一樣的資料low < high
這個條件應當改為low <= high
否則有一些 corner case 會有問題t > a[mid]
的時候,low
應該更新為mid + 1
而非high + 1
t == a[mid]
也就是找到目標的時候, 也應該返回該目標的索引值而非打印結果而已-1
或是None
, 但我更傾向自定義一個錯誤並引發之綜上所述加上其他一些小優化包含變量名稱等, 我有一個修正後的版本給你參考:
我回答過的問題: Python-QA