顺序统计量

在一个n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。

使用选择算法,可以在Θ(n)时间内找到第i个顺序统计量

  1. 对序列A进行划分,使得[s...p-1] < [p] < [p+1...e]
  2. 如果p==i,则返回A[p]
  3. 如果p>i,对[s...p-1]重新划分,反之对[p+1...e]重新划分
private static int Select(List<int> sq, int s, int e, int i)
{
    //如果s=e了,说明找到了
    if (s >= e)
        return sq[s];
    //划分
    int q = Partition(sq, s, e);
    //找到了
    if (q == i - 1)
        return sq[q];
    //前半部分找
    else if (q > i - 1)
    {
        return Select(sq, s, q - 1, i);
    }
    //后半部分找
    else
    {
        return Select(sq, q + 1, e, i);
    }
}

 

posted on 2016-02-24 21:08  峰入云  阅读(188)  评论(0编辑  收藏  举报

导航