Сортировка 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 предоставляет эффективный способ сортировки массивов и может быть использован в широком диапазоне задач, где требуется сортировка данных.

Похожие вопросы на: "c quicksort "

VSX – программное решение для работы с файлами VSDX
Что такое if name main в Python?
kwargs: расширение функционала в Python
curl post: как правильно отправлять POST запросы с помощью cURL
Перенос строки в питоне
PSR: стандарты и рекомендации для PHP
Удаление ветки в Git: практическое руководство
Факториал: определение, формула и примеры расчетов
CWMP: Мониторинг и управление сетевыми устройствами
Защита сайта с помощью Captcha Google