QuickSort C: быстрая и эффективная сортировка в языке программирования
Quicksort - это алгоритм сортировки, который использует разделяй и властвуй подход. Этот алгоритм был разработан в 1959 году Тони Хоаром.
Суть алгоритма заключается в выборе опорного элемента, на основе которого происходит разделение массива на две части: меньшие элементы от опорного и больше элементы от опорного. Затем рекурсивно вызывается quick sort для этих двух частей.
Алгоритм можно реализовать на любом языке программирования. Однако, прежде чем реализовать алгоритм, нужно понять, как выбирать опорный элемент и как делить массив на две части.
Вот пример реализации quicksort на языке C:
C
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);
}
}
Эта реализация использует метод partition для разделения массива на две части. pivot - опорный элемент - выбирается из конца массива. Затем массив делится на две части на основе этого элемента. Массив меньших элементов помещается перед опорным элементом, а большие элементы - после.
После разделения массива на две части, рекурсивно вызывается quicksort для каждой части до тех пор, пока вся последовательность не будет отсортирована.
Например, можно использовать эту функцию для сортировки массива целых чисел в порядке возрастания:
C
int main()
{
int arr[] = { 5, 4, 3, 2, 1 };
int n = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
Этот код выдаст отсортированный массив: 1 2 3 4 5.
Таким образом, Quicksort - это алгоритм сортировки, который работает методом разделяй и властвуй и который может быть реализован на любом языке программирования. Реализация на C проходит через выбор опорного элемента и метод разделения массива на две части.