2016-10-08 10 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] 

제안 : 당신은 값을 교환을위한 파이썬에서 임시 변수가 필요하지 않습니다. A[i], A[mini] = A[mini], A[i]

0

네 문제가 코드의 교환 부분에, 그것은 내부에 대한 루프 다음에 위치 할 필요가있다 : 당신은 단순히 그것을 할 수 있습니다로 스와핑 코드에서

>>> 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