Быстрая сортировка по убыванию на С
Имею цель преобразовать исходный код быстрой сортировки по возрастанию, в точно такой же, но по убыванию. Не совсем понимаю, как этот код работает (Получил на лекции)
int split(int a[], int low, int high)
{
int part_element = a[low];
for (;;)
{
while (low < high && part_element <= a[high])
high--;
if (low >= high)
break;
a[low++] = a[high];
while (low < high && a[low] <= part_element)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}
void QuickSort(int a[], int low, int high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
QuickSort(a, low, middle - 1);
QuickSort(a, middle + 1, high);
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Как работает - просто рекурсивно делит каждый массив так, что после слева до некоторого элемента оказываются все элементы, меньшие его, а справа - большее. И так до массивов из 1 элемента.
А поменять саму сортировку просто - заменить два сравнения опорного элемента на обратные:
part_element <= a[high]
a[low] <= part_element
на
part_element >= a[high]
a[low] >= part_element