#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);
}
}
}