C 快速排序调试

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 *

我正在调试一个版本的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 */
           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);