2016-10-08 3 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-1 и n соответственно, а не n-2 и n-1.

Таким образом, ваш код должен быть как:

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 = 5 
>>> b = 3 
>>> a, b = b, a 
>>> a 
3 
>>> b 
5 

В коде свопинга, было бы как: A[i], A[mini] = A[mini], A[i]

0

Да проблема в свопинга части вашего кода, его нужно поместить после внутренней для петли

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 
Смежные вопросы