| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1395 人关注过本帖
标题:杭电1425,谁优化下,老师超时
只看楼主 加入收藏
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:1 
回复 楼主 Buger
#include <stdio.h>
int a[1000000];
int main() {
    int n, m, i, j, x;
    while(scanf("%d%d", &n, &m) != 2);
    for(i = 0; i < n; i++)
      {
        scanf("%d", &x);
        for(j=i-1;j>= 0 && a[j]>x; j--)
            a[j+1]=a[j];
        a[j+1]=x;
      }
         
    for(i = 0; i < m; i++)
       printf("%d ", a[i]);   
    printf("\n");
    return 0;
}
这个问题最适合的方法是插入排序,提供一个参考,没有测试过时间。
2013-04-01 07:21
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:4 
回复 11楼 helloUJS
明显最适合的是堆排序或者改进后的快速排序,三个基础排序算法:冒泡,插入,选择排序时间复杂度过高,一般5000个数的排序就是极限了,而此题数据规模是100w,更快的排序方法可以用堆排序,快速排序,归并排序,基数排序,由于只要求前m个数,所以可以维护一个大小m的堆是最方便的

同5l,楼主现在基础太差,现在多看书,不要急着刷题

[ 本帖最后由 czz5242199 于 2013-4-1 09:11 编辑 ]
2013-04-01 09:07
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
谢谢,楼上的各位...
2013-04-01 09:20
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
老师超时了?
然后让学生优化?
2013-04-01 10:41
快速回复:杭电1425,谁优化下,老师超时
数据加载中...
 
   



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

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