Алгоритм сортировки массивов в пакете Java.util

 /**
 * Sorts the specified sub-array of bytes into ascending order.
 */
private static void sort1(byte x[], int off, int len) {
// Insertion sort on smallest arrays
if (len < 7) {
    for (int i=off; i<len+off; i++)
    for (int j=i; j>off && x[j-1]>x[j]; j--)
        swap(x, j, j-1);
    return;
}

Из строки Arrays.java 804-814

Как указано выше, он требует использования Sorting Sorting. Тем не менее, я принимаю это как Bubble Sort? Какой из них на самом деле и почему?

Ответ 1

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

Ответ 2

Весь этот алгоритм сортировки представляет собой оптимизированную быструю сортировку, которая использует медиану из 3 проиндексированных элементов для получения элемента-поворота, а код, который вы показали, является оптимизацией, когда входной массив (или из рекурсии) мал.

Хотя, цитированная часть - это сортировка вставки, без сомнения.

Но это неправильно, просто посмотрите эту часть алгоритма, поэтому используя эту ссылку:

  • Строки 573-577 создают сортировку вставки для небольших входных массивов.
  • Строки 581-593 выбирают элемент поворота, используя медиану 3.
  • Строки 596-611 выполняют сортировку с использованием элемента сворачивания.
  • Строки 614-616 помещают элементы элемента раздела обратно в середину (элементы быстрого сортировки).
  • Линии 619-622 рекурсия двух половин входного массива.

Хорошее объяснение быстрой сортировки можно найти на http://en.wikipedia.org/wiki/Quicksort.

Ответ 3

Для уже отсортированного массива внешняя петля сортировки пузырьков выполняется только один раз, но внешний цикл вставки выполняется n раз (хотя только 1 сравнение для каждого внешнего цикла).

Мне кажется очевидным, что он вставляет сортировку.

Ответ 4

Bubble сортирует только элементы свопов, расположенные по последовательным индексам.

Обновление: комментарий в исходном коде может быть неправильным: -)