c++STL之sort排序
排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序。
————《信息学奥赛一本通》
1 #include<iostream> 2 #include<algorithm> 8 int main() 9 { 10 int a[10000]; 11 int n; 12 std::cin>>n; 13 for(int i=0;i<n;i++) 14 { 15 std::cin>>a[n];//输入 16 } 17 std::sort(a+0,a+n);//sort 排序 含义:升序排序a数组的第0位到a数组的第n位 18 for(int i=0;i<n;i++) 19 { 20 std::cout<<a[n];//输出 21 } 22 return 0; 23 }
以上是最最简单的一个用sort排序的程序
读者可能有疑问了,难道sort只能升序排序吗?
其实不然。sort默认确实是升序排序,不过你可以自己定义排序规则,比如说下面这样:
1 #include<iostream> 2 #include<algorithm> 3 int aa(int x,int y) 自己定义的排序规则,可以实现降序排序 4 { 5 if(x>y) return 1; 6 else return 0; 7 } 8 int main() 9 { 10 int a[10000]; 11 int n; 12 std::cin>>n; 13 for(int i=0;i<n;i++) 14 { 15 std::cin>>a[n]; 16 } 17 std::sort(a+0,a+n,aa);//排序a数组的第0位到第n位,用自己定义的aa排序规则 18 for(int i=0;i<n;i++) 19 { 20 std::cout<<a[n]; 21 } 22 return 0; 23 }
这里定义的aa函数,就是你进行sort排序时的规则,这里这个规则可以随你写,比如说按照其他特征排序,如:关键字等等,而且其中的排序规则可以有多个,比如说下面这个:
1 int aa(const student & a,const student &b) 2 { 3 if(a.score>b.score) return 1; 4 if(a.score<b.score) return 0; 5 if(a.name<b.name) return 1; 6 }
这个是对一个结构体中的数据进行排序,排序的规则是按照结构体中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。。。)
以下贴出源代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 #include<algorithm> 5 using namespace std; 6 int aa(string x,string y) 7 { 8 if(x>y) return 1; 9 else return 0; 10 } 11 int main() 12 { 13 freopen("iknowss.in","r",stdin); 14 freopen("iknowss.out","w",stdout); 15 int n; 16 string zong[100001]; 17 cin>>n; 18 for(int i=0;i<n;i++) 19 { 20 string zhong; 21 cin>>zhong; 22 zong[i]=zhong; 23 } 24 sort(zong+0,zong+n,aa); 25 for(int i=0;i<n;i++) 26 { 27 cout<<zong[i]; 28 } 29 return 0; 30 }
完。