| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1408 人关注过本帖, 1 人收藏
标题:关于一个在一组无序数中查找第k大的数算法
只看楼主 加入收藏
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:5 
关于一个在一组无序数中查找第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
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:2 
学习了!
2010-03-28 15:48
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:18 
贴个代码,有局限性的,只能处理整形数,O(n)的时间不过如果数据太大空间会增大。应该还有更好的方法。

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int a[6]={2,4,67,8,3,5};
    int i,max=0,count=0;
    int k;
    scanf("%d",&k);
    for(i=0;i<6;i++)
    {
        max=max>a[i]?max:a[i];
    }
    int *p=(int*)malloc(sizeof(int)*max+1);
    memset(p,0,sizeof(int)*max+1);
    for(i=0;i<6;i++)
    {
        p[a[i]]=a[i];
    }
    for(i=max;i>0;i--)
    {
        if(p[i]!=0)
        {
            count++;
            if(count==k)
            {
                break;
            }
        }
    }
    printf("%d",p[i]);
    return 0;
}


[ 本帖最后由 玩出来的代码 于 2010-3-28 21:39 编辑 ]

离恨恰如春草,更行更远还生。
2010-03-28 21:30
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:0 
三楼的朋友,你的代码中时间复杂度是o(m),m为数组中最大数。那样效果就不好了吧。
2010-03-29 20:44
liruikai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-10
收藏
得分:0 
学习了,谢谢
2012-10-10 10:42
liruikai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-10
收藏
得分:0 
一楼和三楼的思想都很high,,,汲取所长,
2012-10-10 10:58
快速回复:关于一个在一组无序数中查找第k大的数算法
数据加载中...
 
   



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

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