c++STL之sort排序

  • 格式:pdf
  • 大小:71.50 KB
  • 文档页数:2

c++STL之sort排序

排序算法为竞赛中最常⽤的算法之⼀,我们可以利⽤C++⾃带的库函数进⾏排序。

————《信息学奥赛⼀本通》

1 #include

2 #include 8 int main()

9 {

10 int a[10000];

11 int n;

12 std::cin>>n;

13 for(int i=0;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

19 {

20 std::cout<

21 }

22 return 0;

23 }

以上是最最简单的⼀个⽤sort排序的程序

读者可能有疑问了,难道sort只能升序排序吗?

其实不然。sort默认确实是升序排序,不过你可以⾃⼰定义排序规则,⽐如说下⾯这样:

1 #include

2 #include

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

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

19 {

20 std::cout<

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

5 if(a.name

6 }

这个是对⼀个结构体中的数据进⾏排序,排序的规则是按照结构体中score的⼤⼩降序排序,如果两个score相等,就按照name的字典序升

序排序,相信⼤家动能看得懂。

下⾯贴出⼀个例题:

Combination

(iknowss.cpp)

Description

有 n 个正整数,伟⼤的中国⼈民要把它们连接成⼀排,形成⼀个最⼤的integer。

举个栗⼦:n=3 时,3 个整数 1,3,4 联接成的最⼤整数为:431 ⼜如:n=4 时,4 个整数 7,13,4,246 联接成的最⼤整数为:7424613Input

N后跟n个正整数。

Output

连成的最⼤数

Hint

对于前7个数据,n<=100000

对于第8个数据,n<=10000

对于第9个数据,n<=1000

对于第10个数据,n<=100

对于所有数据,integer<=10^10

数据随机,略弱=-=

(以上⼜是⼆货学长改⾃noip题)

这个题最简单的⽅法就是⽤字符串格式输⼊的这⼏个数,按照字符串字典序sort,再降序输出就可以了(为什么这次学长出的题这么⽔。。

。于是我就有时间多讲了点sort。。。)

以下贴出源代码:

1 #include

2 #include

3 #include

4 #include

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

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

26 {

27 cout<

28 }

29 return 0;

30 }

完。