Функция Bubble sort не сортирует данный массив - PullRequest
0 голосов
/ 01 июня 2018

Итак, я настроил алгоритм пузырьковой сортировки, и, как ни странно, он не возвращает отсортированный массив, а только несортированный массив.

Данный массив;

int[] array = { 20, 5, 1, 6, 23, 52, 15, 12 };

Алгоритм пузырьковой сортировки;

public static int[] sort_array(int[] array) {

    int [] sorted = array;
    int temp = 0;

    for (int i = 0; i < sorted.length - 1; i++) {
        for (int j = 0; i < sorted.length - i - 1; i++) {
            if (sorted[j] > sorted[j + 1]) {
                temp = sorted[j];
                sorted[j] = sorted[j + 1];
                sorted[j + 1] = temp;
            }
        }
    }
    return sorted;
}

Также сделан метод возврата массива;

public static void return_list(int[] array) {

    for (int i = 0; i < array.length; i++) {
        System.out.println(array[i]);
    }
}

После использования методов он просто возвращает мне несортированный массив.

int[] array = { 20, 5, 1, 6, 23, 52, 15, 12 };

sort_array(array);

return_list(array);

Выход = 20, 5, 1, 6, 23, 52, 15, 12;

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вы проверяете значение i каждый раз, а также увеличиваете его значение на каждой итерации

for (int j = 0; i < sorted.length - i - 1; i++)
0 голосов
/ 03 июня 2018

Есть ошибка: замените i на j здесь -> for (int j = 0; i (здесь)

0 голосов
/ 01 июня 2018

Дублирование массива (при условии, что вы хотите сохранить исходный)

Во-первых, вы не копируете array в sorted здесь.Вы копируете ссылку на массив для сортировки, поэтому любое изменение содержимого sorted будет также отображаться в array

int [] sorted = array;

. Сделайте это для создания нового массива sorted и копирования.содержимое из array в него: Сделать копию массива

Существует несколько способов (Arrays.copyOf, clone и т. д.) сделать копию массива.Например:

int[] sorted = Arrays.copyOf(array, array.length);

Ошибка сортировки

Кроме того, похоже, что в ваших циклах for может быть ошибка.Вы не перебираете j в этой строке

for (int j = 0; i < sorted.length - i - 1; i++)

Итак, причина, по которой вы получаете несортированный массив, заключается в том, что массив не сортируется правильно.

...