码迷,mamicode.com
首页 > 其他好文 > 详细

中位数和顺序统计,以线性期望时间做选择

时间:2014-05-30 01:57:38      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

找出一个数组的最大值和最小值是比较容易的,我们只需遍历一次数组即可。但是寻找一个数组的第i小或者第i大,就需要一些技巧使得查找的时间尽可能小。随机化划分选择算法是一个时间复杂度为O(n)的算法。

bubuko.com,布布扣
int fIndmax(int a[],int p,int r,int i)
{
    if(p==r)
        return a[p];
    int q = RandPartition(a, p, r); // A[q]作为主元将A[p...r]进行划分。
    int k = q - p + 1;           //假设k是要查找的第i小的元素
    if(i==k)                        //如果K=i则主元就是目标元素,如果i<k,则递归地求解左边的序列,如果i>k则递归求解右边的序列
        return a[q];
    else if(i<k)
    {
        return fIndmax(a, p, q-1, i);
    }
    else
        return fIndmax(a, q+1, r, i-k);
}
bubuko.com,布布扣

这个算法的缺点是:如果一个数组中又重复元素,那么得到的结果不是我们期望的结果。解决方法是先删除数组中重复的元素,再利用本算法。 应该还有更好地方法!

中位数和顺序统计,以线性期望时间做选择,布布扣,bubuko.com

中位数和顺序统计,以线性期望时间做选择

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/cliviazhou/p/3757929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!