【发布时间】:2017-05-10 09:20:56
【问题描述】:
int partition(int list[], int left, int right) {
int low = left + 1;
int high = right;
int pivot = list[left];
while (low < high) {
while (low <= right && list[low] < pivot) {
low++;
}
while (high >= left && list[high] > pivot) {
high--;
}
if (low < high) Swap(&list[low], &list[high]);
}
Swap(&list[high], &list[left]);
return high;
}
void quicksort(int list[], int left, int right) {
if (left <= right) {
int p = partition(list, left, right);
quicksort(list, left, p - 1);
quicksort(list, p + 1, right);
}
}
此代码有时会成功排序,但有时它不会产生任何后果并且无法停止运行。我应该修复哪个部分?
【问题讨论】:
-
我建议您在每个循环中使用断点来检查正在发生的事情。此外,在发布到 Stack Overflow 时,导致错误的示例输入总是有帮助的。
-
srand((int)time(NULL));将其移至main,以便在您的程序中调用一次。否则,如果代码运行时间不到一秒钟,您可能会在每次调用时得到相同的rand()号码。另请注意,srand采用unsigned int参数,而不是int。 -
当发布一个关于运行时问题的问题时(因为这个问题)发布示例输入、预期输出、实际输出和发布的干净编译的代码(发布的代码缺少 main() 函数和所需的
#include语句) -
发布的代码似乎试图在
partition()函数中执行compare()函数,这:1)使函数不必要地复杂,2)包含代码问题的根源.除此之外,这行:Swap(&list[high], &list[left]);不正确,因为没有任何迹象表明需要交换。 -
感谢您的评论
标签: c algorithm data-structures quicksort