Каково сравнение между этими кодами в отношении сортировки вставками? - PullRequest
0 голосов
/ 18 сентября 2018

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

Вот что я сделал:

public class InsertionSort {
    public static void sort (int array[]) {
        for (int i = 1; i < array.length; i++) {
            int j = i - 1;
            while (j >= 0 && array [j] > array [j + 1]) {
                int temp = array [j + 1];
                array [j + 1] = array [j];
                array [j] = temp;
                j -= 1;
            }
        }
    }
}

Внутри моегоОсновной метод, я написал это:

public class TestAlgos {
    public static void main (String args []) {
        int array[] = {2,5,3,6,8,0,4,2,4,6,1,4,6,9,3};

        InsertionSort.sort(array);
        System.out.println(array);
    }
}

Но при запуске я получил такой вывод (кстати, я использовал eclipse):

[I@ed17bee

Таким образом, я искал в Интернете решения и нашелэтот код на сайте.

while(i > 0 && Array[i] > key) {
    Array[i + 1] = Array[i];                
    i = i - 1;
}
Array[i + 1] = key;

Я не знаю, неверен ли мой код.Пожалуйста, объясните.

Кроме того, мой второй вопрос заключается в том, почему вместо ошибки в качестве вывода отображается цифра-строка.

1 Ответ

0 голосов
/ 18 сентября 2018

В вашем коде нет ничего плохого, поскольку это правильная реализация сортировки вставками.Тем не менее, второй код, который вы процитировали, является лучшим подходом только потому, что он делает меньше вставок.

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

Алгоритм, заключенный в кавычки, сдвигает индексы значений до тех пор, пока больше не будут доступны / не требуются дополнительные операции, а затем помещает значение, сохраненное в переменной key , под текущий индекс.

...