На данный вопрос уже ответили:
Изучаю потихоньку виды сортировок на Java. Каждую сортировку реализую в отдельном методе. Не знаю почему, но в методы ниже sortBubble передается уже отсортированный массив. Разъясните, как исправить, чтобы в каждый метод, реализующий сортировку, подавался неотсортированный массив, созданный методом fillArray
public class OneThree {
public static void main(String[] args) {
int[] a = new int[20];
fillArray(a);
sortBubble(a);
sortSelection(a);
sortInsert(a);
}
static int[] fillArray (int[] a) {
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random()*9+1);
System.out.print(a[i] + " ");
}
System.out.println();
return a;
}
static void sortBubble (int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = a.length-1; j > i; j--) {
if (a[j - 1] > a[j]) {
int tmp = a[j - 1];
a[j - 1] = a[j];
a[j] = tmp;
}
}
}
System.out.println("\nСортировка пузырьком:\n" + Arrays.toString(a));
}
static void sortSelection(int[] a) {
for (int i = 0; i < a.length; i++) {
int min = a[i];
int min_i = i;
for (int j = i+1; j < a.length; j++) {
if (a[j] < min) {
min = a[j];
min_i = j;
}
}
if (i != min_i) {
int tmp = a[i];
a[i] = a[min_i];
a[min_i] = tmp;
}
}
System.out.println("\nСортировка выбором:\n" + Arrays.toString(a));
}
static void sortInsert(int[] arr) {
int tmp;
int j;
for (int i = 0; i < arr.length-1; i++) {
if(arr[i] > arr[i+1]) {
tmp = arr[i+1];
arr[i+1] = arr[i];
j = 1;
while (j > 0 && tmp < arr[j-1]) {
arr[j] = arr[j-1];
j--;
}
arr[j] = tmp;
}
}
System.out.println("\nСортировка вставками:\n" + Arrays.toString(arr));
}
}
В Java массив передается по ссылке - это значит, что вы передаете не копию массива(как с примитивными типами), а ссылку на массив. Когда вы в методе сортируете массив, у вас сортируется не копия, а изначальный массив. А потом вы передаете в остальные методы уже отсортированный массив.
Как написал Pavel, передавайте в каждый метод копию исходного массива: sortBubble(a.clone())
, sortSelection(a.clone)
, и т.д.
Более подробно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
хочу сделать так, чтобы при вызове метода из другого класса можно было менять значение его массива на нужное мне, но никак не выходит это сделать...
Найти сумму арифметической прогрессии f(n, N) = n + 2n + 3n + 4n + 5n +
Подскажите можно ли создать глобальный класс конфигурации для ApplicationContext в Spring вместо того что бы использовать вот такой вот пример:
Не могу понять почему не работает базовый методСоздал абстрактный класс Rodent для задачи интерфейса