Задать вопрос
saboteur_kiev
@saboteur_kiev
software engineer

Непонятка с сортировкой — почему random более плохой случай, чем decremental array?

Собственно тренируюсь в java.
Написал bubble sort и quicksort, но меня удивляет такая ситуация:
Дольше всего сортируются рандомные данные.
Я предполагал, что worst case должен быть декрементальный массив (от большего к меньшему), но он сортируется быстрее, чем случайные данные.
Массив со случайными числами генерю отдельно, то есть время замеряю исправно.
Или decremental и не должен быть worst case?
  • Вопрос задан
  • 242 просмотра
Подписаться 1 Оценить Комментировать
Ответ пользователя Mercury13 К ответам на вопрос (2)
@Mercury13
Программист на «си с крестами» и не только
Для пузырька убывающий массив действительно худший возможный случай, и единственное, что могу предположить,— JIT и предсказание ветвлений на уровне процессора. Ради интереса перейди на устаревшую виртуальную машину — думаю, этот случай сразу же станет худшим.

Для быстрой убывающий массив — один из лучших случаев, будет сделано ровно [n/2] обменов. Легко показать, что элементы в начале и конце массива, стоящие на своих местах, быстрая сортировка не сместит никогда. Так что первое, что сделает сортировка,— разобьёт на меньший (отсортированный) и больший (частично отсортированный как надо, частично — в обратном порядке). Ту часть, которая как надо, сортировка не тронет. А ту, которая наоборот — задействуем трансфинитную индукцию, и получаем, что ровно [n/2].
Ответ написан
Комментировать