c++STL之sort排序
2015-12-01 19:08
357 查看
排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序。
————《信息学奥赛一本通》
以上是最最简单的一个用sort排序的程序
读者可能有疑问了,难道sort只能升序排序吗?
其实不然。sort默认确实是升序排序,不过你可以自己定义排序规则,比如说下面这样:
这里定义的aa函数,就是你进行sort排序时的规则,这里这个规则可以随你写,比如说按照其他特征排序,如:关键字等等,而且其中的排序规则可以有多个,比如说下面这个:
这个是对一个结构体中的数据进行排序,排序的规则是按照结构体中score的大小降序排序,如果两个score相等,就按照name的字典序升序排序,相信大家动能看得懂。
下面贴出一个例题:
Combination
(iknowss.cpp)
Description
有 n 个正整数,伟大的中国人民要把它们连接成一排,形成一个最大的integer。
举个栗子:n=3 时,3 个整数 1,3,4 联接成的最大整数为:431 又如:n=4 时,4 个整数 7,13,4,246 联接成的最大整数为:7424613
Input
N后跟n个正整数。
Output
连成的最大数
Hint
对于前7个数据,n<=100000
对于第8个数据,n<=10000
对于第9个数据,n<=1000
对于第10个数据,n<=100
对于所有数据,integer<=10^10
数据随机,略弱=-=
(以上又是二货学长改自noip题)
这个题最简单的方法就是用字符串格式输入的这几个数,按照字符串字典序sort,再降序输出就可以了(为什么这次学长出的题这么水。。。于是我就有时间多讲了点sort。。。)
以下贴出源代码:
完。
————《信息学奥赛一本通》
#include<iostream> #include<algorithm> int main() { int a[10000]; int n; std::cin>>n; for(int i=0;i<n;i++) { std::cin>>a ;//输入 } std::sort(a+0,a+n);//sort 排序 含义:升序排序a数组的第0位到a数组的第n位 for(int i=0;i<n;i++) { std::cout<<a ;//输出 } return 0; }
以上是最最简单的一个用sort排序的程序
读者可能有疑问了,难道sort只能升序排序吗?
其实不然。sort默认确实是升序排序,不过你可以自己定义排序规则,比如说下面这样:
#include<iostream> #include<algorithm> int aa(int x,int y) 自己定义的排序规则,可以实现降序排序 { if(x>y) return 1; else return 0; } int main() { int a[10000]; int n; std::cin>>n; for(int i=0;i<n;i++) { std::cin>>a ; } std::sort(a+0,a+n,aa);//排序a数组的第0位到第n位,用自己定义的aa排序规则 for(int i=0;i<n;i++) { std::cout<<a ; } return 0; }
这里定义的aa函数,就是你进行sort排序时的规则,这里这个规则可以随你写,比如说按照其他特征排序,如:关键字等等,而且其中的排序规则可以有多个,比如说下面这个:
int aa(const student & a,const student &b) { if(a.score>b.score) return 1; if(a.score<b.score) return 0; if(a.name<b.name) return 1; }
这个是对一个结构体中的数据进行排序,排序的规则是按照结构体中score的大小降序排序,如果两个score相等,就按照name的字典序升序排序,相信大家动能看得懂。
下面贴出一个例题:
Combination
(iknowss.cpp)
Description
有 n 个正整数,伟大的中国人民要把它们连接成一排,形成一个最大的integer。
举个栗子:n=3 时,3 个整数 1,3,4 联接成的最大整数为:431 又如:n=4 时,4 个整数 7,13,4,246 联接成的最大整数为:7424613
Input
N后跟n个正整数。
Output
连成的最大数
Hint
对于前7个数据,n<=100000
对于第8个数据,n<=10000
对于第9个数据,n<=1000
对于第10个数据,n<=100
对于所有数据,integer<=10^10
数据随机,略弱=-=
(以上又是二货学长改自noip题)
这个题最简单的方法就是用字符串格式输入的这几个数,按照字符串字典序sort,再降序输出就可以了(为什么这次学长出的题这么水。。。于是我就有时间多讲了点sort。。。)
以下贴出源代码:
#include<cstdio> #include<iostream> #include<string> #include<algorithm> using namespace std; int aa(string x,string y) { if(x>y) return 1; else return 0; } int main() { freopen("iknowss.in","r",stdin); freopen("iknowss.out","w",stdout); int n; string zong[100001]; cin>>n; for(int i=0;i<n;i++) { string zhong; cin>>zhong; zong[i]=zhong; } sort(zong+0,zong+n,aa); for(int i=0;i<n;i++) { cout<<zong[i]; } return 0; }
完。
相关文章推荐
- C++终极复习篇(一)----HelloWorld
- 546B. Soldier and Badges
- C++:STL标准入门汇总
- 344A. Candy Bags
- C语言之指针笔记
- C++之UML关系说明图
- Java与c/c++运行时的不同
- C++指针例
- Visual c++ 2012 软件错误
- 【C/C++学习笔记】改造 printf 的小例子
- c++ 继承机制易犯的错误
- c++ reference counting引用计数原理
- C语言预处理指令笔记 by STP
- 个人学习——排序算法:直接插入排序&希尔排序(C++)
- 数组中只出现一次的数(2)(C++)
- C++primer plus第六版课后编程练习答案11.7
- Leetcode Palindrome Number C++
- c++转换函数和类的自动转换
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- 设计模式系列(二)观察者模式(Observer Pattern)