Лабораторная работа по программированию: Быстрая сортировка - 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;
- }
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Объявляем две функции: quickSort и partition
- Функция quickSort принимает массив, левую границу и правую границу в качестве параметров
- Если левая граница меньше правой границы, то рекурсивно вызываем функцию quickSort для левой и правой половин массива после разделения на подмассивы в функции partition
- Функция partition принимает массив, левую границу, правую границу и опорный элемент в качестве параметров
- Выбираем опорный элемент как первый элемент массива
- Инициализируем переменные i и j для указания на начало и конец подмассива, содержащего элементы, меньшие или равные опорному элементу
- Пока встреча с элементом, большим опорного элемента, не произошла, увеличиваем значение i
- Пока встреча с элементом, меньшим или равным опорному элементу, не произошла, уменьшаем значение j
- Если i стало больше j, значит, опорный элемент находится в самом конце массива и является уже последним элементом
- Если i меньше или равно j, меняем местами элементы с индексами i и j
- Перемещаем опорный элемент на позицию j
- Возвращаем j в качестве индекса для разделения массива на подмассивы
- В функции main создаем массив a и инициализируем его значениями
- Выводим массив на экран
- Рекурсивно вызываем функцию quickSort для массива a с левым индексом 0 и правым индексом 8
- Выводим отсортированный массив на экран
- Возвращаем 0 в качестве статуса выполнения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д