Quicksort效果不佳

时间:2016-03-20 12:31:18

标签: c algorithm quicksort

我曾尝试使用书中的伪代码实现快速排序(看起来像维基百科中的伪代码),但我无法让它成功。

此源代码:

int partitionare(int a[], int n, int p, int r)
{
   int x, i, j, aux;
   x = a[r]; // pivot
   i = p - 1;
   for (j = p; j < r; j++)
   {
       if (a[j] <= x)
       {
           i++;
           aux = a[j];
           a[j] = a[i];
           a[i] = aux;
        }   
   }
   aux = a[i + 1];
   a[i + 1] = a[r];
   a[r] = aux;
   return i + 1;
}
void quicksort(int a[], int n, int p, int r)
{
    if (p < r)
    {
       int q = partitionare(a, n, p, r);
       partitionare(a, n, p, q - 1);
       partitionare(a, n, q + 1, r);
    }
}

其中p和r是数组的开始和结束

和通话功能:

quicksort(a, n, 0, n-1);

不要介意第二个论点,n。这仅用于测试目的。

1 个答案:

答案 0 :(得分:1)

对函数quicksort()内的最后一次调用Wikipedia article进行递归处理(不是函数partition()

void quicksort(int a[], int n, int p, int r)
{
    if (p < r)
    {
       int q = partitionare(a, n, p, r);
       partitionare(a, n, p, q - 1);     /* recursive quicksort() here */
       partitionare(a, n, q + 1, r);     /* recursive quicksort() here */
    }
}