sort

Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 53698    Accepted Submission(s): 15118

Problem Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
 
5 3 3 -35 92 213 -644
Sample Output
 
213 92 3

Hint

请用VC/VC++提交

Author
LL
Source
ACM暑期集训队练习赛(三)

问题链接:HDU1425 sort。

问题简述:参见上文。

问题分析

  本问题是对于n个数据,求最大的m个元素。类似于求第k小元素问题,可以用分治法来实现。基于快速排序(Quicksort)算法程序,略作修改就可以实现。

  前m个元素(大的元素)使用快速排序,后面的元素(小的元素)就不需要排序。

程序说明

使用C++算法库中的排序算法sort()也是一种有效的方法,还可以用部分排序算法partial_sort(),后一种算法更加有效。

AC的C语言程序如下:

/* HDU1425 sort */#include <stdio.h>#define MAXN 1000000int data[MAXN];// 划分:大的放在主元的左边,小的放在主元的右边
int split(int a[], int low, int high)
{int part_element = a[low];for (;;) {while (low < high && part_element >= a[high])high--;if (low >= high) break;a[low++] = a[high];while (low < high && a[low] >= part_element)low++;if (low >= high) break;a[high--] = a[low];}a[high] = part_element;return high;
}// 找出最大的m个数:使用分治法,在快速排序的基础上修改而成
void mmaxsort(int a[], int low, int high, int m)
{int middle;if (low >= high) return;middle = split(a, low, high);mmaxsort(a, low, middle - 1, m);// 只需要考虑左边的m个元素,其他部分不用排序if(middle + 1 < m)mmaxsort(a, middle + 1, high, m);
}int main(void)
{int n, m, i;while(scanf("%d%d", &n, &m) != EOF) {// 读入数据for(i=0; i<n; i++)scanf("%d", &data[i]);// 排序mmaxsort(data, 0, n-1, m);// 输出结果for(i=0; i<m; i++) {if(i)printf(" ");printf("%d", data[i]);}printf("\n");}return 0;
}

AC的C++语言程序(排序算法实现)如下:

/* HDU1425 sort */#include <iostream>
#include <algorithm>using namespace std;const int MAXN = 1000000;
int a[MAXN];int main(void)
{int n, m;while(scanf("%d%d", &n, &m) != EOF) {// 读入数据for(int i=0; i < n; i++)scanf("%d", &a[i]);// 排序partial_sort(a, a + m, a + n, greater<int>());// 输出结果for(int i = 0; i < m; i++) {if(i)printf(" ");printf("%d", a[i]);}printf("\n");}return 0;
}

AC的C++语言程序(排序算法实现)如下:

/* HDU1425 sort */#include <iostream>
#include <algorithm>using namespace std;const int MAXN = 1000000;
int data[MAXN];int main(void)
{int n, m;while(scanf("%d%d", &n, &m) != EOF) {// 读入数据for(int i=0; i < n; i++)scanf("%d", &data[i]);// 排序sort(data, data+ n);// 输出结果for(int i = 0, j = n - 1; i < m; i++, j--) {if(i)printf(" ");printf("%d", data[j]);}printf("\n");}return 0;
}

AC的C语言程序(计数排序,最佳解法)如下:

/* HDU1425 sort */#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>using namespace std;const int MAXV = 500000;
const int MAXN = MAXV + MAXV;
int cnt[MAXN + 1];int main(void)
{int n, m, a;while(scanf("%d%d", &n, &m) != EOF) {memset(cnt, 0, sizeof(cnt));// 读入数据for(int i=0; i < n; i++) {scanf("%d", &a);cnt[a + MAXV]++;}// 输出结果for(int i = 0, j = MAXN; i < m; j--) {while(cnt[j] && i < m) {if(i)printf(" ");printf("%d", j - MAXV);cnt[j]--;i++;}}printf("\n");}return 0;
}

HDU1425 sort【排序】相关推荐

  1. 关于学习Python的一点学习总结(5->切片赋值->sort排序->列表操作)

    16.给切片赋值: >>> test=list('hello')>>> test['h', 'e', 'l', 'l', 'o']>>> test ...

  2. layui 自定义排序_浅谈layui中table的sort排序

    table模块是layui框架最核心的组成之一,它用于对表格进行一些列功能和动态化数据操作,本文介绍了layui中table的sort排序,解决了在我们使用sort排序时可能遇到的一些问题. 今天来谈 ...

  3. 关于Lucene的自定义Sort排序

    参考:http://blog.csdn.net/wxwzy738/article/details/8585786 使用Sort排序工具实现排序  Lucene在查询的时候,可以通过以一个Sort作为参 ...

  4. C#之IComparable用法,实现ListT.sort()排序

    这篇文章主要介绍了C#的一些基础知识,主要是IComparable用法,实现List<T>.sort()排序,非常的实用,这里推荐给大家.   List<T>.sort()可以 ...

  5. 2.sort 排序命令讲解

    sort命令 sort:文本排序,仅仅是对显示文件的排序,而不影响源文件的顺序,是根据ASSII码 的字符升序来排列的. -n:安装数值大小从小到大排列 ,默认是升序. -r:降序排列 ***** - ...

  6. C++使用Merge Sort排序计数反转的实现算法(附完整源码)

    C++使用Merge Sort排序计数反转的实现算法 C++使用Merge Sort排序计数反转的实现算法完整源码(定义,实现,main函数测试) C++使用Merge Sort排序计数反转的实现算法 ...

  7. Java List 排序 :Lambda表达式sort排序

    前言 java 1.8+ Lambda表达式sort排序 // 获取一组Book实例 List<Book> bookList = ...;// 按Book的出版日期正序排序(ASC) Li ...

  8. c#sort升序还是降序_c# List的sort排序方法详解

    诸如List&ltT&gt等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序. 但是,其前提是集合中存放的是可直接排序的基本类型,如List&ltint& ...

  9. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. libevent源码分析:eventop
  2. win2003主/辅DNS服务器详细配置
  3. mockito入门_Mockito入门
  4. JENKINS+maven+ssh+shell 完成自动化部署工具的开发
  5. 汇编语言---计算有符号数算式的值
  6. 北大计算机基础与应用,北大16秋《计算机基础与应用-第六组》在线作业
  7. 深度解析Android中字体设置
  8. 181228每日一句
  9. 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
  10. 使用C语言gets函数和gets_s函数,读取含空格的字符串
  11. vue生命周期学习(watch跟computed)
  12. 世界上第一套电子表格软件 —— VisiCalc
  13. Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案
  14. RNN网络对新冠疫情进行预测
  15. Eplan绘图软件:EPLAN 中的项目结构
  16. android 方法映射,高通Android平台驱动层 MSM8916 键值映射方法
  17. JAVA_抽象类和接口
  18. 贝叶斯算法 — 朴素贝叶斯分类器— 过滤垃圾邮件 — 流失用户 — 用户画像
  19. 外卖店优先级(模拟)
  20. 《深渊古纪》古剑奇谭衍生小说 阅读笔记

热门文章

  1. Spring如何配置bean属性
  2. C#实现文件二进制存储
  3. android:id=@android:id/list,Logcat错误 - 内容必须有一个ListView的id属性是'android.R.id.list'...
  4. 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据
  5. transaction already active
  6. Eclipse IDE的安装与配置
  7. 地理在计算机中的应用,计算机在地理教学中应用形式之一:适合于大班教学的演示型...
  8. netty java_GitHub - leihuazhe/Java11-Netty-Demo: 基于Java11 构建的 netty 服务端客户端 模块化例子...
  9. builder forms oracle 函数如何使用_Oracle EBS 之 Forms开发 一
  10. 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库