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 } 

完。

 

posted on 2015-12-01 19:08  张同学one  阅读(2854)  评论(1编辑  收藏  举报