2016-10-08 41 views
-1

私が実行すると、最初の最小の数値だけがソートされます。ループのどこかに問題がありますか?選択並べ替え並べ替え

def selectionSort(A): 
    n=len(A) 
    print(n) 

    mini=0 
    for i in range(0,n-2): 
     mini=i 
     for j in range(i+1,n-1): 
      if A[j]<A[mini]: 
       mini=j 
      if i!=mini: 
       temp=A[i] 
       A[i]=A[mini] 
       A[mini]=temp 

    return A 
+0

はい、問題はループのどこかにあります。 –

答えて

0

は実際には二つの問題があります。

  1. あなたの二ifはインナーforループの外でなければなりません。
  2. そして、n-2n-1の代わりに、外側ループと内側ループがそれぞれn-1nまで反復される必要があります。したがって

、あなたのコードは次のようにする必要があります:

def selectionSort(A): 
    n=len(A) 
    print(n) 
    mini=0 
    for i in range(0,n-1): 
     mini=i 
     for j in range(i+1,n): 
      if A[j]<A[mini]: 
       mini=j 
     if i!=mini: 
      temp=A[i] 
      A[i]=A[mini] 
      A[mini]=temp 
    return A 

出力:

>>> selectionSort([2, 5, 7, 1, 3, 0, 10, 43, 21, 32]) 
10 
[0, 1, 2, 3, 5, 7, 10, 21, 32, 43] 

提案:あなたが値を交換するためにpythonで一時変数は必要ありません。 A[i], A[mini] = A[mini], A[i]

0

はい問題はあなたのコードのスワッピング一部で、それは内側のforループの後に配置する必要がある:あなたは単にそれを行うことができますよう、あなたのスワップコードで

>>> a = 5 
>>> b = 3 
>>> a, b = b, a 
>>> a 
3 
>>> b 
5 

、それは次のようになります

def selectionSort(A): 
    n = len(A) 
    mini=0 
    for i in range(0,n-2): 
     mini=i 
     for j in range(i+1,n-1): 
      if A[j]<A[mini]: 
       mini=j 
     if i!=mini: 
      temp=A[i] 
      A[i]=A[mini] 
      A[mini]=temp 

    return A 
関連する問題