Быстрая сортировка (Quick sort)
Быстрая сортировка - это эффективный алгоритм сортировки, использующий стратегию "разделяй и властвуй". Он выбирает один элемент в качестве опорного и разделяет массив на две части: элементы меньше опорного и элементы больше опорного, затем рекурсивно применяет ту же стратегию к этим подмассивам.
Алгоритм
Алгоритм быстрой сортировки работает следующим образом:
- Выбираем опорный элемент из массива.
- Перегруппировываем элементы в массиве так, что элементы меньше опорного перемещаются перед ним, а большие - после.
- Рекурсивно применяем те же шаги к подмассивам слева и справа от опорного элемента.
Анализ сложности
- Временная сложность быстрой сортировки: В среднем и худшем случаях
, где - количество элементов. В худшем случае (когда каждый раз выбирается наихудший опорный элемент) - . - Пространственная сложность быстрой сортировки:
из-за использования стека вызовов при рекурсии.
Реализация
Приведём примеры реализации быстрой сортировки:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
#include <vector>
void quickSort(std::vector<int>& arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
int partition(std::vector<int>& arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return (i + 1);
}
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
private int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
Заключение
Быстрая сортировка, известная своей высокой эффективностью и широким применением, является одним из ключевых алгоритмов в области компьютерных наук. Её способность быстро обрабатывать большие объемы данных делает её предпочтительным выбором для многих приложений, требующих эффективной сортировки.
Основываясь на стратегии "разделяй и властвуй", быстрая сортировка обеспечивает хорошую производительность в среднем и лучшем случаях, хотя в худшем случае её производительность может снижаться до