我曾尝试使用书中的伪代码实现快速排序(看起来像维基百科中的伪代码),但我无法让它成功。
此源代码:
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。这仅用于测试目的。
答案 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 */
}
}