2013-04-11 2 views
0

Я пробовал много разных вариантов, и у меня такая же проблема. После выполнения selectio nsort количество выводимых элементов не соответствует размеру моего массива. Я работал с любым массивом размером 10, но выход не содержит 10 чисел. Однако вывод сортировки сортировки сортируется.Ошибка с Selectionsort

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class Sorts { 

public static Integer[] createArray(int size) { 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < size; i++) 
     list.add(i); 
    Collections.shuffle(list); 
    Integer[] array = list.toArray(new Integer[list.size()]); 
    for (int i = 0; i < array.length; i++) { 
     System.out.print(array[i]); 
    } 
    return array; 

} 

public static void selectionSort(Integer[] array) { 
    Integer min; 
    for (Integer i = 0; i < array.length - 1; i++) { 
     min = i; 
     for (Integer j = i + 1; j < array.length; j++) { 
      if (array[j].compareTo(array[min]) > 0) { 
       min = j; 
      } 
     } 
     if (min != i) { 
      Integer temp = array[i]; 
      array[i] = array[min]; 
      array[min] = temp; 
      System.out.print(array[i]); 

     } 

    } 
} 

public static void main(String args[]) { 
    int number = 10; 
    Integer[] list = createArray(number); 
    System.out.println(""); 
    selectionSort(list); 

} 

}

+0

Вы можете попробовать Collections.sort (Arrays.asList (массив)); – Abi

ответ

2

Всякий раз, когда вы делаете своп, распечатайте номер. Но в массиве из 10 элементов вы будете делать только 9 свопов - последний элемент уже будет в правильном месте! Чтобы исправить это, добавьте System.out.print(array[array.length - 1]); в конец вашей функции.

Кроме того, если минимальным элементом является i, тогда никакой обмен не будет выполнен, и элемент не будет напечатан. Это все еще сортирует массив, но если вы хотите его распечатать, вы можете удалить оператор if (min != i) и просто сделать своп на каждом проходе по списку.

Вы также должны взглянуть на использование int s, а не Integer s. Integer обычно медленнее, чем int, и вы обычно используете их только тогда, когда Java хочет объект.

Смежные вопросы