Сортировка+разделением+(Quicksort)

Метод сортировки разделением был предложен Чарльзом Хоаром (он любит называть себя Тони) в 1962 г. Этот метод является развитием метода простого обмена и настолько эффективен, что его стали называть "методом быстрой сортировки - Quicksort". Основная идея алгоритма состоит в том, что случайным образом выбирается некоторый элемент массива x, после чего массив просматривается слева, пока не встретится элемент a[i] такой, что a[i] > x, а затем массив просматривается справа, пока не встретится элемент a[j] такой, что a[j] < x. Эти два элемента меняются местами, и процесс просмотра, сравнения и обмена продолжается, пока мы не дойдем до элемента x. В результате массив окажется разбитым на две части - левую, в которой значения ключей будут меньше x, и правую со значениями ключей, большими x. Далее процесс рекурсивно продолжается для левой и правой частей массива до тех пор, пока каждая часть не будет содержать в точности один элемент. Понятно, что как обычно, рекурсию можно заменить итерациями, если запоминать соответствующие индексы массива. Проследим этот процесс на примере нашего стандартного массива //Пример быстрой сортировки// code 8 23 5 65 |44| 33 1 6
 * **Начальное состояние массива** ||

code || code || 8 23 5 6 44 33 1 65        |---| 8 23 5 6 1 33 44 65
 * **Шаг 1 (в качестве x выбирается a[5])** ||

code || code 8 23 |5| 6 1 33 44 65 1 23 5 6 8 33 44 65 |--| 1 5 23 6 8 33 44 65
 * **Шаг 2 (в подмассиве a[1], a[5] в качестве x выбирается a[3])** ||

code || code 1 5 23 |6| 8 33 44 65   || 1 5 8 6 23 33 44 65
 * **Шаг 3 (в подмассиве a[3], a[5] в качестве x выбирается a[4])** ||

code || code 1 5 8 |6| 23 33 44 65   |--| 1 5 6 8 23 33 44 65
 * **Шаг 4 (в подмассиве a[3], a[4] выбирается a[4])** ||

code || Алгоритм недаром называется быстрой сортировкой, поскольку для него оценкой числа сравнений и обменов является O(n?log n). На самом деле, в большинстве утилит, выполняющих сортировку массивов, используется именно этот алгоритм.

Источник-[Электронный ресурс]. Режим доступа: [|http://citforum.ru/programming/theory/sorting/sorting1.shtml#2_4]