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