HDU1425 sort【排序】
sort
Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 53698 Accepted Submission(s): 15118
请用VC/VC++提交
问题链接: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【排序】相关推荐
- 关于学习Python的一点学习总结(5->切片赋值->sort排序->列表操作)
16.给切片赋值: >>> test=list('hello')>>> test['h', 'e', 'l', 'l', 'o']>>> test ...
- layui 自定义排序_浅谈layui中table的sort排序
table模块是layui框架最核心的组成之一,它用于对表格进行一些列功能和动态化数据操作,本文介绍了layui中table的sort排序,解决了在我们使用sort排序时可能遇到的一些问题. 今天来谈 ...
- 关于Lucene的自定义Sort排序
参考:http://blog.csdn.net/wxwzy738/article/details/8585786 使用Sort排序工具实现排序 Lucene在查询的时候,可以通过以一个Sort作为参 ...
- C#之IComparable用法,实现ListT.sort()排序
这篇文章主要介绍了C#的一些基础知识,主要是IComparable用法,实现List<T>.sort()排序,非常的实用,这里推荐给大家. List<T>.sort()可以 ...
- 2.sort 排序命令讲解
sort命令 sort:文本排序,仅仅是对显示文件的排序,而不影响源文件的顺序,是根据ASSII码 的字符升序来排列的. -n:安装数值大小从小到大排列 ,默认是升序. -r:降序排列 ***** - ...
- C++使用Merge Sort排序计数反转的实现算法(附完整源码)
C++使用Merge Sort排序计数反转的实现算法 C++使用Merge Sort排序计数反转的实现算法完整源码(定义,实现,main函数测试) C++使用Merge Sort排序计数反转的实现算法 ...
- Java List 排序 :Lambda表达式sort排序
前言 java 1.8+ Lambda表达式sort排序 // 获取一组Book实例 List<Book> bookList = ...;// 按Book的出版日期正序排序(ASC) Li ...
- c#sort升序还是降序_c# List的sort排序方法详解
诸如List<T>等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序. 但是,其前提是集合中存放的是可直接排序的基本类型,如List<int& ...
- SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- libevent源码分析:eventop
- win2003主/辅DNS服务器详细配置
- mockito入门_Mockito入门
- JENKINS+maven+ssh+shell 完成自动化部署工具的开发
- 汇编语言---计算有符号数算式的值
- 北大计算机基础与应用,北大16秋《计算机基础与应用-第六组》在线作业
- 深度解析Android中字体设置
- 181228每日一句
- 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
- 使用C语言gets函数和gets_s函数,读取含空格的字符串
- vue生命周期学习(watch跟computed)
- 世界上第一套电子表格软件 —— VisiCalc
- Kubernetes 学习总结(27)—— Kubernetes 安装 Redis 集群的两个方案
- RNN网络对新冠疫情进行预测
- Eplan绘图软件:EPLAN 中的项目结构
- android 方法映射,高通Android平台驱动层 MSM8916 键值映射方法
- JAVA_抽象类和接口
- 贝叶斯算法 — 朴素贝叶斯分类器— 过滤垃圾邮件 — 流失用户 — 用户画像
- 外卖店优先级(模拟)
- 《深渊古纪》古剑奇谭衍生小说 阅读笔记
热门文章
- Spring如何配置bean属性
- C#实现文件二进制存储
- android:id=@android:id/list,Logcat错误 - 内容必须有一个ListView的id属性是'android.R.id.list'...
- 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据
- transaction already active
- Eclipse IDE的安装与配置
- 地理在计算机中的应用,计算机在地理教学中应用形式之一:适合于大班教学的演示型...
- netty java_GitHub - leihuazhe/Java11-Netty-Demo: 基于Java11 构建的 netty 服务端客户端 模块化例子...
- builder forms oracle 函数如何使用_Oracle EBS 之 Forms开发 一
- 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库