在O(n)时间内选择顺序

时间:2013-07-11 07:34:59

标签: c++ algorithm

从“算法简介”我试图将代码实现为在n / 5组中分割n个元素,然后递归地找到中值,然后递归地找到第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他们没有使用任何递归!

0 个答案:

没有答案