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

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

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

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

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

textual
Листинг программы
  1. // quickSort.c
  2. #include <stdio.h>
  3.  
  4. void quickSort(int[], int, int);
  5. int partition(int[], int, int);
  6.  
  7. int main() {
  8.     int a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9};
  9.  
  10.     int i;
  11.     printf("\n\nUnsorted array is:  ");
  12.     for (i = 0; i < 9; ++i) {
  13.         printf(" %d ", a[i]);
  14.     }
  15.  
  16.     quickSort(a, 0, 8);
  17.  
  18.     printf("\n\nSorted array is:  ");
  19.     for (i = 0; i < 9; ++i) {
  20.         printf(" %d ", a[i]);
  21.     }
  22.  
  23.     return 0;
  24. }
  25.  
  26. void quickSort(int a[], int l, int r) {
  27.     int j;
  28.  
  29.     if (l < r) {
  30.         // divide and conquer
  31.         j = partition(a, l, r);
  32.         quickSort(a, l, j - 1);
  33.         quickSort(a, j + 1, r);
  34.     }
  35. }
  36.  
  37. int partition(int a[], int l, int r) {
  38.     int pivot, i, j, t;
  39.     pivot = a[l];
  40.     i = l;
  41.     j = r + 1;
  42.  
  43.     while (1) {
  44.         do {
  45.             ++i;
  46.         } while (a[i] <= pivot && i <= r);
  47.         do {
  48.             --j;
  49.         } while (a[j] > pivot);
  50.         if (i >= j) {
  51.             break;
  52.         }
  53.         t = a[i];
  54.         a[i] = a[j];
  55.         a[j] = t;
  56.     }
  57.     t = a[l];
  58.     a[l] = a[j];
  59.     a[j] = t;
  60.     return j;
  61. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы