2013-09-18 2 views
0

У меня проблема с моим выходом в этом сортировке.Выбор Сортировка, задающая неправильный вывод

Вот код:

public class SelectionSort{ 
    public static void main(String args[]){ 

     int [] arr_sort = {1, 7, 2, 18, 23, 13}; 

     System.out.println("Selection Sort"); 
     System.out.print("Before sorting: "); 
     int x; 
     for(x=0; x<arr_sort.length; x++){ 
      System.out.print(arr_sort[x] + " "); 
     } 

     System.out.println(""); 
     System.out.print("After sorting: "); 

     int n = arr_sort.length; 
     int i,j, min, temp; 
     for(i=0; i<n; i++){ 
      min=1; 
     for(j=i+1; j<n; j++){ 
     if (arr_sort[j]<arr_sort[min]){ 
      min=j; 
      temp=arr_sort[i]; 
      arr_sort[i]=arr_sort[min]; 
      arr_sort[min]=temp; 
     } 

    } 

System.out.print(arr_sort[i] + " "); 
} 

} 

} 

Выход:

Selection Sort 
Before sorting: 1 7 2 18 23 13 
After sorting: 2 1 7 18 23 13 
+1

Так ... в чем проблема? Должно быть, я пропустил эту часть в чтении вашего вопроса. – Makoto

+0

Сортировка сортируется, как вы можете видеть в разделе «После сортировки» Должно быть: 1, 2, 7, 13, 18, 23. – user2768501

ответ

0

Тот факт, что min объявлен вне цикла является проблемой.

При запуске новой итерации он все равно сохранит старое значение, поэтому вы будете сравнивать с элементом, который уже признан минимальным и выбранным.

Кроме того, min не должно быть 1, сделайте это i, так как вы не хотите сравнивать со вторым элементом на каждом шаге.

После этих изменений он работает, но на самом деле это не сортировка выбора, вам нужно найти минимальную и только своп, а не каждый раз, когда вы найдете меньший элемент.

к коду:

int n = arr_sort.length; 
int i, j, temp; // min removed here 
for (i = 0; i < n; i++) 
{ 
    int min = i; // min declared here and changed to i 
    for (j = i + 1; j < n; j++) 
    { 
    if (arr_sort[j] < arr_sort[min]) 
    { 
     min = j; 
    } 
    } 
    // moved swap to here 
    temp = arr_sort[i]; 
    arr_sort[i] = arr_sort[min]; 
    arr_sort[min] = temp; 
    System.out.print(arr_sort[i] + " "); 
} 
+0

Я пытался найти причину проблемы этого кода. Ты мне очень помог, огромное спасибо! – user2768501