@Olenka_Yurinova
начинающий программист

Как наличие одинаковых элементов в сортируемой последовательности влияет на быструю сортировку?

Как наличие одинаковых элементов в сортируемой последовательности влияет на быструю сортировку?на количество присваиваний,и в целом?
  • Вопрос задан
  • 1587 просмотров
Решения вопроса 1
bobrovskyserg
@bobrovskyserg
Допустим, все элементы массива одинаковы (вы уж простите, но в нашем колхозе последовательности не сортируют).
Тогда всякое разбиение массива на два сортируемых подмассива идёт криво: все элементы массива сбиваются по одну сторону (влево, вправо - тут зависит от реализации) от медианного.
Итого: время сортировки порядка n^2 вместо заветного n*log(n). Количество присваиваний, бл*дь, n-1 (столько раз выбирается медиана) - в отличие от количества сравнений.
Удачной сессии.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Mrrl
@Mrrl
Заводчик кардиганов
Смотря как писать сортировку - здесь всё зависит от мелких деталей.
Если не помнить, что элементы могут быть одинаковыми, легко свалиться в O(n^2).
Можно написать так, что число сравнений не изменится, но одинаковые элементы будут вхолостую переставляться друг с другом.
Можно на каждом шагу бояться, что могут встретиться одинаковые элементы, и делить массив на три части - меньше опорного, равные ему и большие его. Тогда при большом количестве одинаковых элементов будет работать быстро, но когда одинаковых элементов нет - то число сравнений будет в 1.6 раза больше.
Можно при разделении смотреть, был ли хоть один элемент равен опорному, и отделять равные только если был. Тогда будет плохо, когда каждый элемент встречается ровно два раза.
Есть и другие способы. И всё это будет quicksort. Если всё написать правильно, то чем больше одинаковых элементов, тем быстрее будет сортировка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы