2016-10-04 3 views
0

Pythonを使用してこのアルゴリズムを実装するための作業。私の論理は大丈夫だと思ったが、明らかにPythonが不平を言っているわけではない。 whileループは問題を引き起こしています。私はそれが期待どおりに動作しますが、明らかにリスト全体をソートしないことを削除する場合。私の思考プロセス - >線形検索を使用して最小番号を見つける - >新しい番号をリストに加える - >現在のリストからその番号を取り除く - >同じリストをループする(最小番号を取り除いた)私たちがリスト全体を "x"回繰り返すまで。 "x"はリストの長さに等しい。私が実行していると思う問題は、forループを実行するたびにリストが更新されることはありませんか?私はエラーLine 21: ValueError: list.index(x): x not in listを得続けます。 "x"がリストにあるとしても。私が間違ってやっていることについて、どんな考えですか?ソートアルゴリズムPython

""" 
Selection sort algorithm. 
""" 

import random 
ls = [] 
max_number = 10 
while len(ls) < max_number: 
    ls.append(random.randint(1,101)) 
print ls 

def selection_sort(items_to_sort): 
    smallest_number = items_to_sort[0] 
    current_number = 0 
    sorted_items = [] 
    item_len = len(items_to_sort) 
    while item_len > 0: 
     for item in items_to_sort[:]: 
      if item < smallest_number: 
       smallest_number = item 
     items_to_sort.pop(items_to_sort.index(smallest_number))  
     sorted_items.append(smallest_number) 
     item_len -= 1  
    return sorted_items 
print selection_sort(ls) 

答えて

2

あなたwhileループの最初の実行後ので、smallest_number変数を再初期化していないように見えます - あなたがより以前の値あなただけpop EDよりも小さい値を探してくださいリスト。

あなたがリストになくなりました以前の最小値よりも値が小さい見つからない

は、あなたがwhileループの前の反復のようpop同じsmallest_numberにしてみてください。しかし、その値は、あなたがValueError

があなたのwhileループの反復ごとに実行される最初の行であることを行smallest_number = items_to_sort[0]を移動してみてください得る理由であるもはやitems_to_sortリストではありません。

+0

を割り当てる必要がはいuは、彼が再初期化smallst_numberない場合、彼は最後のよりも小さい小さい番号を見つけることはできません、正しいです小さい数字... – Acepcs

+0

ファンタスティック。あなたは人の中の神です。誠にありがとうございます。 – terratunaz

+0

嬉しいことに、この回答が役に立ったら、私は助けてくれました。 :) – ctj232

1

すべてのwhileループの後、あなたはitems_to_sort[0]

smallest_number
current_number = 0 
sorted_items = [] 
item_len = len(items_to_sort) 
while item_len > 0: 
    smallest_number = items_to_sort[0] 
    for item in items_to_sort[:]: 
     if item < smallest_number: 
      smallest_number = item 
    index=items_to_sort.index(smallest_number) 
    items_to_sort.pop(index) 
    print(items_to_sort) 
    sorted_items.append(smallest_number) 
    item_len -= 1 
return sorted_items 
関連する問題