#java #insertion-sort
#java #вставка-сортировка
Вопрос:
Я изучаю механику кода вставки. Это оригинальный алгоритм вставки кода, описанный на нескольких сайтах:
for (int i = 0; i < a.length; i ) {
int key = a[i];
int j = i;
while (j > 0 amp;amp; a[j-1] > key) {
swap(a, j, j - 1);
j--;
}
a[j] = key;
}
Проблема в том, что, изучая, как это работает, я понял, что следующий код без использования ключа делает точно то же самое:
for (int i = 0; i < a.length; i ) {
int j = i;
while (j > 0 amp;amp; a[j-1] > a[j]) {
swap(a, j, j - 1);
j--;
}
}
Мой вопрос в том, почему в исходном алгоритме требуется их ключ? необходимо ли это для некоторых крайних случаев, которые второй алгоритм не учитывает? Если да, то в каких крайних случаях они будут?
После некоторого тестирования результаты обоих алгоритмов выполняют одинаковое количество обменов, поэтому я не могу понять, в чем разница в использовании ключевой переменной.
Комментарии:
1. Это не требуется. Семантически оба алгоритма одинаковы.
key
Это » текущее значение под наблюдением «, если вы так хотите (a[j]
в измененной версии). Основное отличие заключается в том, что исходный код извлекает значение только один раз, в то время как обновленная версия извлекает его снова и снова.2. Разве второе решение не больше похоже на сортировку пузырьками, но в обратном направлении?
3. На ваш вопрос дан ответ?