Далее представлен краткий конспект разбора алгоритма быстрой сортировки по книге «Алгоритмы. Построение и анализ» (Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн). Примеры кода написаны на языке Java.
Время работы
- Наихудший вариант:
O(n^2)
- В среднем случае:
O(n*logn)
Свойства:
- Не требует дополнительной памяти, работает с тем же массивом данных. Использует принцип “разделяй и властвуй”. В большинстве случаев работает за время
O(n* logn)
и является одним из самых эффективных методов сортировки.
Принцип работы:
- Выбирается опорный элемент (рандомно, либо последний/первый элемент в массиве, либо среднее арифметическое, если массив состоит из чисел)
- Массив разбивается на два подмассива, в одном элементы не больше опорного, в другом не меньше опорного
- Полученные подмассивы сортируются рекурсивно вызовом процедуры быстрой сортировки
Метод быстрой сортировки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Для запуска сортировки необходимо выполнить: quickSort(array, 0, array.length - 1);
Метод разбиения массива
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Пример работы из книги Кормена:
Небольшое отличие: в коде x - здесь можно считать i + 1, а счетчик i в коде здесь - это j
Пример разделения массива в середине работы процедуры partition: