2016-11-13 12 views
0

私は与えられたリスト内の指定された項目のインデックスを返すPython関数を設計することを任されています。これはbinary_sort(l、item)と呼ばれ、lはリスト(ソートされていないかソート済み)、itemはインデックスを探しているアイテムです。Pythonでバイナリ検索関数を使用してインデックス値をソートする

は、ここで私がこれまで持っているものだが、それだけでソートされたリスト

def binary_search(l, item, issorted=False): 

templist = list(l) 
templist.sort() 

if l == templist: 
    issorted = True 

i = 0 
j = len(l)-1 

if item in l: 

    while i != j + 1: 
     m = (i + j)//2 
     if l[m] < item: 
      i = m + 1 

     else: 
      j = m - 1 

    if 0 <= i < len(l) and l[i] == item: 
     return(i) 
else: 
    return(None) 

それがソートされていないリストを指定された場合、それはソートされていないリストの値のインデックスを返しますので、どのように私はこれを変更することができますを扱うことができますパラメータとしての値?

+0

リストから使用できる唯一のメソッドはlist.sort()とlist.copy()です。 –

+0

辞書のソートメソッドを使用できますか? –

答えて

0

バイナリ検索(上記のアルゴリズムは「バイナリソート」と呼ばれていません) - 順序付きシーケンスが機能することが必要です。

各検索ステップで半分以上のアイテムを捨てることができるため、順序付けられていないシーケンスでは機能しません。

一方、list.sortedメソッドを使用することが許可されているので、これは方法です。l.sort()を呼び出すと、検索操作を開始する前にターゲットリストがソートされ、アルゴリズムが機能します。

プログラムで何かを呼び出さないようにしてください。l - 数学の背景を持ち、紙の上で使用されていた人のリストにはいい名前かもしれませんが、lは難しい1から派生したもので、ソースコードの読み取りが悪いものです。この場合の適切な名前は、sequencelst、またはdataです。 (listも避けるべきです。なぜなら、同じ名前のPython組み込み関数を上書きするからです)。

関連する問題