2017-01-25 6 views
0

私は自宅で仕事をするためのソートアルゴリズムを作成しようとしていますが、それを動作させることはできません。Python3.6で最初からソートアルゴリズムを書く

def sa(x): 
    print(x) 
    i = 0 
    s_array = [] 

    while x: 
     for x[i] in x: 
      if x[i] == min(x): 
       s_array.append(x.pop(i)) 
       i = 0 
      elif x[i] == max(x): 
       s_array.append(x.pop(i)) 
       i = 0 
      else: 
       i += 1 

    print(s_array) 

私はプログラムで印刷機能を持つべきではないことを知っていますが、私はそれを簡潔かつパッケージ化したかったのです。これは私が手に出力されます:

>>> sa([89, 23, 33, 45, 10, 12, 45, 45, 45]) 
[89, 23, 33, 45, 10, 12, 45, 45, 45] 
[89, 45, 45, 45, 45, 45, 45, 45, 12] 

私はこのようなコードを持っていた:

def sa(x): 
    print(x) 
    i = 0 
    s_array = [] 

    while x: 
     for x[i] in x: 
      if x[i] == min(x): 
       s_array.append(x.pop(i)) 
       i = 0 
      else: 
       i += 1 

print(s_array) 

をが、出力としてこれを取得し、私は(最大を追加する必要がありましたと考えられていた)のelif:

>>> sa([89, 23, 33, 45, 10, 12, 45, 45, 45]) 
[89, 23, 33, 45, 10, 12, 45, 45, 45] 
[10, 45, 45, 45, 45, 45, 45, 45, 45] 

助けてください。

+1

' X [i]はxのための:まだリスト内の要素だけで内部forループを削除している間、あなただけのループにしたいの代わりにするのでそれが反復されるときに 'x'を返します。あなたが意図しているものではないことは間違いありません。 –

+0

i = 0の場合、forループ文x [i]はx [0]と仮定しますか? –

+0

この場合、forループとwhileループのポイントはありません。あなたは1つを選択する必要があります、あなたはおそらくしばらくしたいソートするため。また、 'x:s_array.append(x.pop(x.index(min(x)))) 'の間に行うこともできます。 –

答えて

0

ループはあなたが反復によるxの要素にx[i]を割り当てるある書かれているため、あなた、これを検討方法:

i = 0 
x = ["a","b","c","d","e"] 

for x[i] in x: 
    print(x) 

これは、次のように表示されます

['a', 'b', 'c', 'd', 'e'] 
['b', 'b', 'c', 'd', 'e'] 
['c', 'b', 'c', 'd', 'e'] 
['d', 'b', 'c', 'd', 'e'] 
['e', 'b', 'c', 'd', 'e'] 

お知らせ最初の要素x[0]がリストが繰り返されるときにリストの各要素に変更され、iが変更されると、基本的にuリストの要素を予測可能だがほとんど役に立たない方法での各要素に `` xを割り当てている[i]は `:

while x: 
    if x[i] == min(x): 
     s_array.append(x.pop(i)) 
     i = 0 
    else: 
     i += 1 
関連する問題