Рубрики

Программа C ++ для быстрой сортировки

Как и сортировка слиянием , QuickSort — это алгоритм «разделяй и властвуй». Он выбирает элемент как сводную и разделяет данный массив вокруг выбранной сводной. Существует много разных версий быстрой сортировки, которые выбирают сводную информацию по-разному.

  1. Всегда выбирайте первый элемент как опорный.
  2. Всегда выбирайте последний элемент как опорный (реализован ниже)
  3. Выберите случайный элемент как опорный.
  4. Выберите медиану как опору.

Ключевым процессом в быстрой сортировке является partition (). Цель разделов, заданная для массива и элемента x массива как pivot, поместить x в правильную позицию в отсортированном массиве и поместить все меньшие элементы (меньше x) перед x, а все большие элементы (больше x) после Икс. Все это должно быть сделано за линейное время.
Псевдокод для рекурсивной функции быстрой сортировки:

/* low  --> Starting index,  high  --> Ending index */
quickSort(arr[], low, high)
{
    if (low < high)
    {
        /* pi is partitioning index, arr[p] is now
           at right place */
        pi = partition(arr, low, high);

        quickSort(arr, low, pi - 1);  // Before pi
        quickSort(arr, pi + 1, high); // After pi
    }
}

/ * 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++)

    {

        // Если текущий элемент меньше или

        // равно pivot

        if (arr[j] <= pivot)

        {

            i++;    // увеличиваем индекс меньшего элемента

            swap(&arr[i], &arr[j]);

        }

    }

    swap(&arr[i + 1], &arr[high]);

    return (i + 1);

}

  
/ * Основная функция, реализующая QuickSort

 arr [] -> Массив для сортировки,

  низкий -> Начальный индекс,

  высокий -> конечный индекс * /

void quickSort(int arr[], int low, int high)

{

    if (low < high)

    {

        / * pi - индекс разделения, теперь arr [p]

           в нужном месте * /

        int pi = partition(arr, low, high);

  

        // Отдельно сортируем элементы перед

        // раздел и после раздела

        quickSort(arr, low, pi - 1);

        quickSort(arr, pi + 1, high);

    }

}

  
/ * Функция для печати массива * /

void printArray(int arr[], int size)

{

    int i;

    for (i=0; i < size; i++)

        printf("%d ", arr[i]);

    printf("n");

}

  
// Программа драйвера для проверки вышеуказанных функций

int main()

{

    int arr[] = {10, 7, 8, 9, 1, 5};

    int n = sizeof(arr)/sizeof(arr[0]);

    quickSort(arr, 0, n-1);

    printf("Sorted array: n");

    printArray(arr, n);

    return 0;

}

Пожалуйста, обратитесь к полной статье на QuickSort для более подробной информации!

Рекомендуемые посты:

Программа C ++ для быстрой сортировки

0.00 (0%) 0 votes