【发布时间】:2020-09-26 17:01:13
【问题描述】:
我有这个快速排序的代码
int sum = 0;
int partition(int *L, int left, int right) {
int pivot = left;
int p_val = L[pivot];
while (left < right) {
while (L[left] <= p_val)
left++;
while (L[right] > p_val)
right--;
if (left < right) {
swap(&L[left], &L[right]);
sum++;
}
}
swap(&L[pivot], &L[right]);
sum++;
return right;
}
void quicksort(int *L, int start, int end) {
if (start >= end)
return;
int splitPoint = partition(L, start, end);
quicksort(L, start, splitPoint - 1);
quicksort(L, splitPoint + 1, end);
}
我认为它工作正常。对于给定的数组{8,4,2,1},我知道已经进行了 3 次交换。但是,我需要修改代码,以便函数返回交换次数。这可能吗?如果可以,怎么做?请尽可能简单地解释,因为我是这方面的新手。我需要对 mergeSort 做同样的事情,但我仍然没有找到不太复杂的工作代码。当我这样做时,我会更新问题。谢谢你。
【问题讨论】:
-
在函数中传递一个 int 指针并在每次交换操作后递增它的值
-
很抱歉,我不知道该怎么做。
-
我这样做了,但我不明白函数如何返回该值,在这种情况下签名应该是
int,但分区不会返回所需的值。
标签: c algorithm sorting quicksort mergesort