Изменения

Перейти к: навигация, поиск

Быстрая сортировка

23 байта убрано, 01:12, 17 июня 2016
Быстрая сортировка с разделением на три части
Когда в сортируемом массиве имеется множество повторяющихся ключей предыдущие реализации быстрой сортировки можно существенно улучшить. Например массив, который состоит из равных ключей, вовсе не нуждается в дальнейшей сортировке, однако предыдущие реализации продолжают процесс разделения, подвергая обработке все более мелкие подмассивы, независимо от того, насколько большим является исходный файл.
 
[[Файл:G3.png |400px|thumb|center| Разделение массива <tex> a </tex>]]
В основу программы положено разделение массива на три части:
После этого сортировка завершается двумя рекурсивными вызовами.
Чтобы достичь поставленной цели, программа содержит ключи, [[Файл:G3.png |400px|thumb|center| Разделение массива <tex> a </tex>]] Элементы массива равные разделяю- щему разделяющему элементу, слева находятся между <tex> l </tex> и <tex> p </tex> и справа между <tex> q </tex> и г <tex> r </tex>. В разделяющем цикле, когда указатели просмотра перестают изменяться и выполняется обмен значениями <tex> i </tex> и <tex> j</tex>, она проверяет каждый из этих элементов проверяется на предмет равенства разделяюще- му разделяющему элементу. Если элемент, который сейчас находится слева, равен разделяющему элементу, то при помощи операции обмена он помещается в левую часть масси- ва; массива, если элемент, который сейчас находится справа, равен разделяющему элементу, то в результате операции обмена он помещается в правую часть массива. После того как указатели пересекутся, элементы, равные разделяющему элементу и находящиеся на разных концах массива, после операции обмена попадают в свои окончательные позиции. После этого указанные ключи могут быть исключены из подмассивов, для которых выполняются последующие рекурсивные вызовы.
'''void''' quicksort(a: '''T'''[n], '''int''' l, '''int''' r)
quicksort(a, 1, j)
quicksort(a, i, r)
 
===Параллельная сортировка===
635
правок

Навигация