从“算法简介”开始,我试图将代码实现为将 n 个元素分成 n/5 组,然后递归地找到中值,然后递归地找到第 i 个顺序统计信息。这是我的代码
bool isTrue(int *a, int *b)
{
if((*a) < (*b))
swap(*a, *b);
return *a < *b;
}
int select(int *A, int n ,int p)
{
int *B[(n / 5) + 2];
cout << (n / 5) + 2 << endl;
int i, j;
for(i = 1, j = 1; i <= (n - 5); i += 5, ++j)
{
sort(A + i, A + i + 5);
B[j] = A + i + 2;
}
sort(A + i, A + n + 1);
B[j] = A + i + (n - i) / 2;
sort(B + 1, B + (n / 5) + 2, isTrue);
}
这是我能做到的。现在我试图找到 的中位数B
,然后B[median] - A
作为枢轴。但这似乎不对。在书中它说递归地找到中位数的中位数。我无法理解。有什么帮助吗?编辑:我还注意到在wiki中他们没有使用任何递归!