Сортировка quicksort: алгоритм и примеры кода
QuickSort (быстрая сортировка)
QuickSort – это один из наиболее эффективных алгоритмов сортировки массивов. Он относится к категории сортировок с применением сравнений. Быстрая сортировка основывается на стратегии "разделяй и властвуй", которая заключается в разбиении массива на подмассивы, сортировке этих подмассивов и их последующем объединении.
Разбиение массива в алгоритме QuickSort происходит следующим образом. Изначально выбирается опорный элемент, который будет служить определенной точкой разбиения. Далее, все элементы, которые меньше опорного, перемещаются влево от него, а все элементы, которые больше опорного, перемещаются вправо от него. Этот процесс называется разделением. Затем рекурсивно применяется тот же алгоритм к каждому из получившихся подмассивов. Эта рекурсия продолжается до тех пор, пока длина подмассива не станет равной единице или нулю.
Пример кода на языке C для реализации алгоритма QuickSort:
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(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++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
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);
}
}
int main() {
int arr[] = { 64, 25, 12, 22, 11 };
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("Отсортированный массив: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
В данном примере кода мы определяем несколько функций: swap для обмена значениями двух элементов, а также partition и quickSort для рекурсивного вызова алгоритма. В функции partition мы выбираем последний элемент массива в качестве опорного и перемещаем все элементы, меньшие опорного, перед ним, а все элементы, большие опорного, после него. Затем путем рекурсивных вызовов функции quickSort сортируем левую и правую части массива.
В основной функции main мы создаем пример входного массива и выводим отсортированный массив на экран.
Это лишь простейший пример реализации QuickSort на языке C. В реальных проектах часто требуются оптимизации для обработки больших объемов данных. Однако, даже в этом базовом примере видно, что QuickSort предоставляет эффективный способ сортировки массивов и может быть использован в широком диапазоне задач, где требуется сортировка данных.