您的位置:首页 > 编程语言 > C语言/C++

c++STL之sort排序

2015-12-01 19:08 357 查看
排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序。
————《信息学奥赛一本通》

#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;
}


完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: