| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2743 人关注过本帖
标题:一道很简单的排序题目,我用sort函数去做,但是一直超时,请指点一下更快的 ...
只看楼主 加入收藏
x三生石x
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-10-27
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:4 
一道很简单的排序题目,我用sort函数去做,但是一直超时,请指点一下更快的做法。
给出n个整数,请找出其中较大的K个数。
Input
第一行是两个整数n(10 ≤ n ≤ 10,000,000)和K(1 ≤ K ≤ 10000)。 第二行是n个整数,每个整数均在int表示范围之内。
Output
从小到大输出那较大的K个数,最后一个输出结果后面不带空格。
Sample Input
10 4
0 1 -5 6 -100 10 7 -1 3 8
Sample Output
6 7 8 10

本人用sort函数排序但仍超时的代码如下:
#include<bits/stdc++.h>
int a[10000000];
using namespace std;
int main()
{
    int n,b,i;
    scanf("%d%d",&n,&b);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,a+n);
    for(i=n-b;i<n-1;i++)
    {
        printf("%d ",a[i]);
    }
    printf("%d\n",a[n-1]);
    return 0;
}

求指点一下更快的做法。。。
搜索更多相关主题的帖子: 排序 sort 做法 整数 int 
2019-01-23 12:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
需要高效的算法

DO IT YOURSELF !
2019-01-23 12:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
sort?后面n-k个不需要输出的数据你排序它们干什么

我写了段测试代码,在 n=10000000,k=1000 时
std::partial_sort 可以比 std::sort 快50-90倍
std::make_heap/pop_heap/push_heap维系k个值 可以在 std::partial_sort 的基础上再快1-3倍
2019-01-23 14:17
x三生石x
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-10-27
收藏
得分:0 
回复 3楼 rjsp
能请教下std:partial_sort和std::make_heap/pop_heap/push_heap要怎么用吗,查了一下,看不太明白,还有这个partial_sort的三个参数分别是什么的,能给我说一说吗
2019-01-23 16:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
回复 4楼 x三生石x
当 k <= n 时
    std::partial_sort( a, a+k, a+n, std::greater<int>() );
然后倒序输出 (a+k,a] 这个区间的值
2019-01-23 17:08
快速回复:一道很简单的排序题目,我用sort函数去做,但是一直超时,请指点一下更 ...
数据加载中...
 
   



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

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