我想製作一個二進制搜索算法,但我無法使其工作。它最終達到目標數量,但不會將其計算爲與目標數量相等。 I.E.如果78是目標數量最終陣列[中點]不等於78,但我的if語句不這樣認爲它會看到它作爲多於或少於78Python二進制搜索項目將不會等於目標
[3, 30, 33, 38, 57, 61, 70, 89, 93, 98]
Enter a number to search for.93
5
61
more
8
93
more
9
98
more
10
這是一個測試的結果。我只是爲了知道它在做什麼而將它打印出來。它打印的第一個數字是中點,第二個數字是該點陣列中的項目。
達到10後,我得到一個索引超出範圍的錯誤。
這是我的代碼。
def BinarySearch(array):
found = False
startpos = 0
endpos = len(array)
mid = 0
target = raw_input("Enter a number to search for.")
while found == False or startpos <= endpos:
mid = (startpos + endpos)/2
if array[mid] == target:
print "Found"
found = True
return found
elif array[mid] < target:
startpos = mid + 1
else :
endpos = mid - 1
return found
'93 == 「93」''回報FALSE'。 –
我想這是一個很好的學習練習,但有一個標準的Python [bisect](https://docs.python.org/2/library/bisect.html)模塊。順便說一句,在程序的外部獲取用戶輸入是更好的設計,然後將輸入(經過轉換並可能驗證之後)傳遞給執行實際工作的內部函數。對於像這樣的小程序來說沒關係,但是在大型程序中它會變得非常混亂。 –
我在初始版本中已經有了這個功能,但是它並沒有接近正常工作,僞代碼就是這樣做的,所以我決定遵循它。 –