Лабораторная работа по программированию: Быстрая сортировка - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сделать быструю сортировку
Ребят, очень надо, помогите плиз, буду очень признателен

Решение задачи: «Лабораторная работа по программированию: Быстрая сортировка»

textual
Листинг программы
// quickSort.c
#include <stdio.h>
 
void quickSort(int[], int, int);
int partition(int[], int, int);
 
int main() {
    int a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9};
 
    int i;
    printf("\n\nUnsorted array is:  ");
    for (i = 0; i < 9; ++i) {
        printf(" %d ", a[i]);
    }
 
    quickSort(a, 0, 8);
 
    printf("\n\nSorted array is:  ");
    for (i = 0; i < 9; ++i) {
        printf(" %d ", a[i]);
    }
 
    return 0;
}
 
void quickSort(int a[], int l, int r) {
    int j;
 
    if (l < r) {
        // divide and conquer
        j = partition(a, l, r);
        quickSort(a, l, j - 1);
        quickSort(a, j + 1, r);
    }
}
 
int partition(int a[], int l, int r) {
    int pivot, i, j, t;
    pivot = a[l];
    i = l;
    j = r + 1;
 
    while (1) {
        do {
            ++i;
        } while (a[i] <= pivot && i <= r);
        do {
            --j;
        } while (a[j] > pivot);
        if (i >= j) {
            break;
        }
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    t = a[l];
    a[l] = a[j];
    a[j] = t;
    return j;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Объявляем две функции: quickSort и partition
  3. Функция quickSort принимает массив, левую границу и правую границу в качестве параметров
  4. Если левая граница меньше правой границы, то рекурсивно вызываем функцию quickSort для левой и правой половин массива после разделения на подмассивы в функции partition
  5. Функция partition принимает массив, левую границу, правую границу и опорный элемент в качестве параметров
  6. Выбираем опорный элемент как первый элемент массива
  7. Инициализируем переменные i и j для указания на начало и конец подмассива, содержащего элементы, меньшие или равные опорному элементу
  8. Пока встреча с элементом, большим опорного элемента, не произошла, увеличиваем значение i
  9. Пока встреча с элементом, меньшим или равным опорному элементу, не произошла, уменьшаем значение j
  10. Если i стало больше j, значит, опорный элемент находится в самом конце массива и является уже последним элементом
  11. Если i меньше или равно j, меняем местами элементы с индексами i и j
  12. Перемещаем опорный элемент на позицию j
  13. Возвращаем j в качестве индекса для разделения массива на подмассивы
  14. В функции main создаем массив a и инициализируем его значениями
  15. Выводим массив на экран
  16. Рекурсивно вызываем функцию quickSort для массива a с левым индексом 0 и правым индексом 8
  17. Выводим отсортированный массив на экран
  18. Возвращаем 0 в качестве статуса выполнения программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы