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

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

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

Помогите, пожалуйста, исправить ошибку в сортировке
void sort5(int left, int right){
    int i = left, j = right;
    int piv = mass[(i + j) / 2]; // Опорным элементом для примера возьмём средний
    while (i <= j)
    {
        while (mass[i] < piv)
            i++;
        while (mass[j] > piv)
            j--;
        if (i <= j)
            Swap((mass+(i++)), (mass+(j--)));
    }
    if (left < j)
        sort5(left, j);
    if (right > i)
        sort5(i, right);
}

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

textual
Листинг программы
#include<stdio.h>
void sort5(int left, int right);
void Swap(int *x,int *y);
int mass[10]={10, 6,3,8,4,7};
int main(void)
{
    int i;
    sort5(0,9);
    for(i=0;i<10;i++)
    printf("%d ",mass[i]);
    return 0;
}
void sort5(int left, int right){
    int i = left, j = right;
    int piv = mass[(i + j) / 2]; // Опорным элементом для примера возьмём средний
    while (i <= j)
    {
        while (mass[i] < piv)
            i++;
        while (mass[j] > piv)
            j--;
        if (i <= j)
            Swap((mass+(i++)), (mass+(j--)));
    }
    if (left < j)
        sort5(left, j);
    if (right > i)
        sort5(i, right);
}
void Swap(int *x,int *y)
{
    int t;
    t=*x; *x=*y; *y=t;
}

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

  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
Похожие ответы