Быстрая сортировка - C (СИ) (148226)

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

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

Помогите, пожалуйста, исправить ошибку в сортировке
Листинг программы
  1. void sort5(int left, int right){
  2. int i = left, j = right;
  3. int piv = mass[(i + j) / 2]; // Опорным элементом для примера возьмём средний
  4. while (i <= j)
  5. {
  6. while (mass[i] < piv)
  7. i++;
  8. while (mass[j] > piv)
  9. j--;
  10. if (i <= j)
  11. Swap((mass+(i++)), (mass+(j--)));
  12. }
  13. if (left < j)
  14. sort5(left, j);
  15. if (right > i)
  16. sort5(i, right);
  17. }

Решение задачи: «Быстрая сортировка»

textual
Листинг программы
  1. #include<stdio.h>
  2. void sort5(int left, int right);
  3. void Swap(int *x,int *y);
  4. int mass[10]={10, 6,3,8,4,7};
  5. int main(void)
  6. {
  7.     int i;
  8.     sort5(0,9);
  9.     for(i=0;i<10;i++)
  10.     printf("%d ",mass[i]);
  11.     return 0;
  12. }
  13. void sort5(int left, int right){
  14.     int i = left, j = right;
  15.     int piv = mass[(i + j) / 2]; // Опорным элементом для примера возьмём средний
  16.     while (i <= j)
  17.     {
  18.         while (mass[i] < piv)
  19.             i++;
  20.         while (mass[j] > piv)
  21.             j--;
  22.         if (i <= j)
  23.             Swap((mass+(i++)), (mass+(j--)));
  24.     }
  25.     if (left < j)
  26.         sort5(left, j);
  27.     if (right > i)
  28.         sort5(i, right);
  29. }
  30. void Swap(int *x,int *y)
  31. {
  32.     int t;
  33.     t=*x; *x=*y; *y=t;
  34. }

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

  1. Включаем заголовочный файл , чтобы иметь возможность работать с функциями ввода-вывода.
  2. Объявляем две функции: sort5 и Swap.
  3. Создаём массив mass[10] и инициализируем его значениями от 10 до 4 (включительно).
  4. В функции main вызываем sort5, передавая ей в качестве аргументов 0 и 9 (индексы левой и правой границ сортируемого массива).
  5. В функции sort5 при помощи цикла for перебираем все элементы массива и выводим их на экран с помощью функции printf.
  6. В функции sort5 создаём переменные i и j, которые будут обозначать левую и правую границы подмассива, который необходимо отсортировать.
  7. Вычисляем средний элемент массива и сохраняем его в переменной piv.
  8. Пока i не больше j выполняем следующие действия:
    1. Пока элемент с индексом i меньше piv - увеличиваем i на 1.
    2. Пока элемент с индексом j больше piv - уменьшаем j на 1.
    3. Если i не больше j - меняем местами элементы с индексами i и j с помощью функции Swap.
  9. Если после цикла i больше j - значит опорный элемент был найден в левой половине массива, и мы должны рекурсивно вызвать sort5 для левой половины массива с новыми границами (i, j).
  10. Если после цикла i меньше j - значит опорный элемент был найден в правой половине массива, и мы должны рекурсивно вызвать sort5 для правой половины массива с новыми границами (i, j).
  11. В функции Swap меняем местами значения указателей x и y, передавая их в функцию как аргументы. Используем временную переменную t для сохранения значения x.

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


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

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

5   голосов , оценка 4 из 5

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

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

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