C 快速排序调试
我正在调试一个版本的quicksort,它故意删除了一条重要的行,但我很难理解它 坏版本:C 快速排序调试,c,quicksort,C,Quicksort,我正在调试一个版本的quicksort,它故意删除了一条重要的行,但我很难理解它 坏版本: void quicksort(char *v [], int n) { int i, last; if (n <= 1) /* nothing to do */ return; last = 0; for (i = 1; i < n; i++) /* partition *
void quicksort(char *v [], int n)
{
int i, last;
if (n <= 1) /* nothing to do */
return;
last = 0;
for (i = 1; i < n; i++) /* partition */
if (strcmp(v[i],v[0]) < 0)
swap(v,++last, i);
swap(v, 0, last); /* restore pivot */
quicksort(v,last); /* recursively sort each part. */
quicksort(v+last-1, n-last-1);
}
void快速排序(char*v[],int-n)
{
int i,最后;
如果(n您的两个快速排序都是错误的。这一行:
quicksort(v+last-1, n-last-1);
应该是:
quicksort(v+last+1, n-last-1);
我不明白为什么有rand()
比另一个要好。你的问题是什么?为什么第一次调用swap函数才能正确运行。我认为这可能会迫使第二次调用quicksort超出数组v的边界,但我不确定为什么。我也不知道为什么可以向数组中添加整数。
quicksort(v+last+1, n-last-1);