java — Сортировка выбора

#java #eclipse #selection-sort

Вопрос:

Я хочу реализовать выравнивание выбора, которое получает 10 целых чисел и организует их в порядке возрастания.

Однако, когда мой код работает, другие вещи работают нормально, но только первое целое число не выровнено.

Пожалуйста, дайте мне знать, как исправить код.

 public static void sort(int[] array) {
    Scanner sc = new Scanner(System.in);
    System.out.println("put the int");
    
    for (int i =0;i <array.length;i  ) {
        System.out.print((i 1) ": ");
    int n = sc.nextInt();
        array[i] = n;
        for (int j = 1; j < array.length;j  ) {
            if (array[i] < array[j]) {
                
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    
    for (int a=0; a< array.length; a  ) {
        System.out.print(array[a] " ");

    }
}
public static void main(String[] args) {
    int[] my_array = {0,0,0,0,0,0,0,0,0,0};
    sort(my_array);
}
 

}

Комментарии:

1. Я знаю, что это «просто» упражнение по кодированию, но наличие функции сортировки, создающей сканер и принимающей ввод с терминала, — это просто ужасно плохой дизайн.

Ответ №1:

Вы должны установить

 int j = 0
 

во внутреннем для

Ответ №2:

Если вы хотите реализовать Selctionsort

  • инициализируйте внутреннее для с помощью int j = i 1
  • измените числа, если массив[i] больше массива[j], а не наоборот
         for (int i =0;i <array.length;i  ) {
            int minValue = array[i];

            for (int j = i  1; j < array.length;j  ) {
                if (array[i] > array[j]) {
                    
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        
        for (int a=0; a< array.length; a  ) {
            System.out.print(array[a] " ");
        }
 

Ответ №3:

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

Чтобы проиллюстрировать это, я разбил код на функции.

 // Find the minimum value in the array, starting the search at "start"
// Returns the index of the minimum
static int findMinIndex(int[] array, int start)
{
    int min = array[start];
    int minIndex = start;
    for (int i = start   1; i < array.length; i  ) {
        if (array[i] < min)  {
            min = array[i];
            minIndex = i;
        }
    }
    return minIndex;
}

// Swap 2 elements of an array
static void swap(int[] array, int index1, int index2)
{
    int temp = array[index1];
    array[index1] = array[index2];
    array[index2] = temp;
}

// Selection sort the array, ascending
static void selectionSort(int[] array)
{
    for (int i = 0; i < array.length; i  ) {
        // First find the minimum from i to the end of the array...
        int minIndex = findMinIndex(array, i);
        // ...then swap
        if (minIndex != i) {
            swap(array, i, minIndex);
        }
    }
}