#java #sorting
Вопрос:
пожалуйста, ознакомьтесь с моим кодом для сортировки пузырьков. Когда я выбираю 5 или более чисел для сортировки моей таблицы, я получаю ошибку: сначала.сначала.сортировка_v2.сортировка(сортировка_v2.java:35).
Совершенно не знаю, почему это произошло, когда я выбираю 2 или три элемента для сортировки, это работает идеально. Я знаю, что это можно сделать по-другому, этот тип сортировки, но, пожалуйста, покажите мне, что я сделал не так, как все еще учусь, и мне очень любопытно узнать подробности этой ошибки, хм.
Также смотрите изображение ниже:введите описание изображения здесь
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Choose how much number you want to sort:");
int sizeOfTab = scanner.nextInt();
int[] numbers = new int[sizeOfTab];
for (int i = 0; i < sizeOfTab; i ) {
System.out.println("Choose number to collection: ");
numbers[i] = scanner.nextInt();
}
scanner.close();
System.out.println(Arrays.toString(sorting(numbers)));
}
private static int[] sorting(int[] numbers) {
boolean notDone = false;
for (int i = 0; i < numbers.length - 1; i ) {
for (int j = 1; j < numbers.length; j ) {
if (numbers[i] > numbers[j]) {
int tmp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = tmp;
notDone = true;
}
}
}
return notDone ? sorting(numbers) : numbers;
}
}
Ответ №1:
Ваша логическая ошибка заключается в том, что вы всегда перезапускаете свой второй внутренний цикл из j = 1
второго элемента в
for (int j = 1; j < numbers.length; j ) { ... }
Вы всегда хотите сравнивать только numbers[i] > numbers[j]
в тех случаях, когда j
больше, чем i
.
Допустим, у вас есть массив [1, 2, 3, 4]
В настоящее время ваш цикл будет запущен и достигнет точки, где он проверит numbers[2] > numbers[1]
и переключит второй и третий элемент, несмотря на то, что массив уже отсортирован.
Чтобы исправить это, просто всегда начинайте свой второй цикл с текущего значения i
с добавлением 1:
for (int j = i 1; j < numbers.length; j ) { ... }