我的目标是将快速排序的源代码按升序转换为完全相同的,但按降序排列。我不太明白这段代码是如何工作的(在讲座中得到)
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 个元素的数组。
并且很容易改变排序本身 - 将参考元素的两个比较替换为反向比较:
在