2017-05-13 82 views
1
def binarysearch(somelist,target): 

    lowindex=0 
    highindex=len(somelist)-1 
    while somelist[lowindex] != target and somelist[highindex] != target: 
     midindex = (highindex+lowindex) // 2 
     if target == somelist[midindex]: 
      print(somelist[midindex]) 
     elif target < somelist[midindex]: 
      highindex=midindex-1 
     elif target > somelist[midindex]: 
      lowindex= midindex + 1 
    return -1 

testlist=[0,1,2,8,13,17,19,32,42,15] 

(binarysearch(testlist,2)) 

有人知道什麼是錯的代碼似乎沒有工作二進制搜索在Python不工作

+1

你的代碼打印的東西只有當目標在'midindex'找到。如果在'lowindex'或'highindex'找到'while'循環就停止。 – nsilent22

+1

爲了練習,我假設你正在編寫自己的二進制搜索。如果不是,則使用內置設施代替: '如果目標在某個列表中: print(target) else: return -1' – BoarGules

回答

0

試試這個代碼:如果找到元素,則返回1,否則返回-1。

def b_search(target): 
    somelist = [0,1,2,8,13,17,19,32,42,15] 
    lowindex=0 
    highindex=len(somelist)-1 
    while lowindex <= highindex: 
     midindex = (highindex+lowindex) // 2 
     if target == somelist[midindex]: 
      return 1 
     elif target < somelist[midindex]: 
      highindex=midindex-1 
     elif target > somelist[midindex]: 
      lowindex= midindex + 1 
    return -1 
print(b_search(11)) 
0

您的二進制文件搜索功能,只要target起初指數或以任何形成於while環子列表的最後一個索引檔的while循環。

您只需檢查低指數總是小於或等於高指標,然後運行while循環。此外,找到該元素後,只需打印該元素並繼續循環。那沒有意義。您可以打印,然後從循環中打印break,或者只需返回目標元素的索引(如果找到)。

所以,現在你的函數變爲:

def binarysearch(somelist, target): 
    lowindex = 0 
    highindex = len(somelist) - 1 
    while lowindex <= highindex: 
     midindex = (highindex+lowindex) // 2 
     if target == somelist[midindex]: 
      return midindex 
     elif target < somelist[midindex]: 
      highindex=midindex-1 
     elif target > somelist[midindex]: 
      lowindex= midindex + 1 
    return -1 

所以,現在當你運行你的二進制搜索功能,它會返回元素2的指數爲:

[IN]: print(binarysearch(testlist, 2)) 
[OUT]: 2