| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1408 人关注过本帖, 1 人收藏
标题:关于一个在一组无序数中查找第k大的数算法
取消只看楼主 加入收藏
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:1 
关于一个在一组无序数中查找第k大的数算法
我写了一个。本以为是最快的,最近有人说还有更快的,望指教。
int kth_a[n](int &a,int k)
{
    int *t,*key;
    int l=0,r=n-1,i,j;
    while (l<r)
   {
        for (key=a[((i=l)+(j=r+1))/2];i<j;)
        {
            for (j--;key<a[j];);//从右到左找到比key大的数,a[j]
            for (i++;a[i]<key;);//从左到右找到比key小的数,a[i]
            if (i<j) t=a[i],a[i]=a[j],a[j]=t;
        }//此时a[]被分为左边a[0..j-1]比a[j]小,a[j+1..n]比a[j]大
        if (k>j) l=j+1;//k为j右方的数
        else r=j;
    }
    return a[k];
}
看起来并非在O(n)内完成,但平均时间是o(n).最坏为o(n*logn)
搜索更多相关主题的帖子: 数算 序数 
2010-03-28 14:45
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:0 
三楼的朋友,你的代码中时间复杂度是o(m),m为数组中最大数。那样效果就不好了吧。
2010-03-29 20:44
快速回复:关于一个在一组无序数中查找第k大的数算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020664 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved