Cтраница 4
Для повышения эффективности быстрой сортировки можно, не применяя рекурсивной процедуры к ставшему коротким подфайлу, перейти к методу простых вставок или методу сортировки посредством выбора. [46]
Простые способы сделать быструю сортировку, ориентированную на массивы, устойчивой, пока не известны. [47]
Простое uicueoGbi сиелать быструю сортировку, ориентированную КУ массива, усюйчнаой, покз не известны. [48]
Внести изменения в двоичную быструю сортировку с целью непосредственного обнаружения ситуаций, когда все ключи равны. [49]
А как удаляет инверсии быстрая сортировка. Рассмотрим список из N элементов, с которым работает алгоритм PivotList. Предположим, что PivotValue больше всех остальных элементов списка. Это означает, что в конце выполнения процедуры значение PivotPoint равно N, и поэтому переменная PivotValue будет указывать не на первый, а на последний элемент списка. Возможно также, что последний элемент списка является наименьшим в нем. Поэтому перестановка этих двух значений отправляет наибольший элемент списка из первой позиции в конец, а наименьший - из конца в начало. Если наибольший элемент стоит первым, то он входит в N - 1 инверсий с остальными элементами списка, а стоящий последним наименьший элемент также образует N - 1 инверсий с остальными элементами списка. Таким образом, одна перестановка двух крайних элементов убивает 2N - 2 инверсий. Именно по этой причине средний случай быстрой сортировки значительно отличается от наихудшего. [50]
Алгоритм 7.4. Итерационный вариант быстрой сортировки, где вначале сортируется меньшая подтаблица и для разделения подтаблицы используется случайно выбранное имя. [51]
L совместно с реализаинями быстрой сортировки, риссма фнваемьами в настоящей главе, Несмотря на то что такой подход ПОЭРЮ. [52]
Еще одно усовершенствование метода быстрой сортировки заключается в использовании такого разделяющего элемента, который с достаточно большой вероятностью делил бы файл вблизи его середины. Наиболее безопасный выбор, минимизирующий вероятность возникновения наихудшего случая, состоит в использовании в качестве разделяющего элемента случайного элемента массива. Тогда вероятность возникновения наихудшего случая становится ничтожно малой. Этот метод представляет собой пример вероятностного алгоритма ( probabilistic algorithm) - такого алгоритма, который использует случайный характер величин для достижения высокой эффективности с большой вероятностью, независимо от степени упорядоченности входных данных. Далее в этой книге мы столкнемся с многочисленными примерами использования свойства случайности при разработке структуры алгоритмов, в частности, когда предполагается наличие той или иной тенденции во входных данных. На практике использование в рамках быстрой сортировки генератора случайных чисел с этой целью может оказаться излишним: простой произвольный выбор оказывается достаточно эффективным. [53]