Лабораторная работа по программированию: Быстрая сортировка - 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 в качестве статуса выполнения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д