2017-05-13 20 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)) 

誰もがこのコードを試してみてくださいバイナリ検索は

+1

あなたのコードを印刷した場合にのみ何かターゲットは「midindex」にあります。 'lowindex'または' highindex'で見つかった場合、 'while'ループは停止します。 – nsilent22

+1

私はあなたが自分のバイナリ検索を練習のために書いていると仮定します。そうでない場合は、組み込みのファシリティを代わりに使用してください。 'オブジェクトリストにターゲットがある場合: print(target) else: return -1' – BoarGules

答えて

0

を動作するようには思えいただきましたコードのdoesntで間違って知っているPythonで動作していません。

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

あなたのバイナリ検索機能はすぐにtargetwhileループ内に形成されたサブリストのいずれかの最初のインデックスまたは最後のインデックスであるとして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