使用sort函数进行排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使⽤sort函数进⾏排序
介绍
C++的⼀个重要组成部分STL(Standard Template Library),即标准模板库,是⼀些⾼级数据结构和算法的集合:⾼级数据结构(容器)主要包括list、set、vector、map等,这些会在后⾯的学习中介绍。

STL中还包括⼀些常⽤的算法,如排序、查找等。

这些⾼级数据结构和算法的集合是世界上很多聪明⼈的杰作。

STL的⽬的是标准化组件,这样就不⽤重新开发,可以使⽤现成的组件。

STL现在是C++的⼀部分,因此可以直接使⽤。

在NOI系列的⽐赛中,允许使⽤STL。

为了提⾼编程效率,要尽量使⽤STL中提供的容器和算法,以避免不必要的低效率、重复编码。

本⽂介绍使⽤STL中的sort函数进⾏排序
sort函数:2参数⽤法##
以下代码实现了数组的升序排序
#include<algorithm> //sort函数由库<algorithm>提供,需要加载头⽂件
#include<iostream>
using namespace std;
int main(){
int a[10]={3, 1, 4, 1, 5, 9, 2, 6, 7, 0};
sort(a+0, a+10); //对sort的10个元素进⾏升序排序
for(int i=0; i<10; i++)
cout<<a[i]<<' ';
return 0;
}
1. 第⼀个参数为排序范围的起始地址,第⼆个参数为排序范围的结束地址,但不包含该结束地址上的元素。

可以理解为该范围定义了⼀
个半开半闭区间:[m, n)
2. 该函数属于同样可应⽤于char,float,double,bool等类型的数组。

sort函数:3参数⽤法##
由于sort的两参数⽤法仅能实现升序排列,有时,我们需要降序或者按照⾃定义的⽅式进⾏排序,例如按照数字位数的多少进⾏排序。

这时可以使⽤sort函数的3参数⽤法,在2参数的基础上增加了⼀个参数:⾃定义函数。

以下代码实现了数组的降序排序
#include<algorithm> //sort函数由库<algorithm>提供,需要加载头⽂件
#include<iostream>
using namespace std;
//⾃定义⽐较函数cmp
bool cmp(const int & A, const int & B){
return A>B; //如果修改为return A<B就还原为了升序排列
}
int main(){
int a[10]={3, 1, 4, 1, 5, 9, 2, 6, 7, 0};
sort(a+0, a+10, cmp); //对sort的10个元素进⾏降序排序
for(int i=0; i<10; i++)
cout<<a[i]<<' ';
return 0;
}
⾃定义函数的本质是制定了⼀个对象A、B的⽐较规则,sort函数按照这个规则进⾏⽐较,从⽽完成排序。

sort函数:⽤于⾃定义的结构体类型数组
我们⾃定义的结构体类型数组同样可以使⽤sort进⾏排序,当然,由于⾃定义类型对象没有默认的⽐较规则,你必须使⽤三参数的sort函数,⾃定义⼀个函数来说明⽐较规则,看下⾯例题:
有N个学⽣的成绩需要进⾏排序,输⼊的每⾏信息包括“姓名”,“分数”,姓名是由⽆空格的英⽂组成。

要求按照如下规则排序:成绩为第⼀排序条件,成绩相同的情况下,姓名按照字典先后顺序排列,输出为N⾏,每⾏⼀组姓名和分数
代码实现
#include<algorithm> //sort函数由库<algorithm>提供,需要加载头⽂件
#include<iostream>
#include<cstring>
using namespace std;
struct STU{ //⾃定义结构体类型STU
char name[50];
int score;
}s[100]; //STU类型数组s
//⾃定义⽐较函数cmp说明⽐较规则bool cmp(const STU & A, const STU & B){
if(A.score>B.score) return true;
if(A.score<B.score) return false;
if(strcmp(, )<0) return true;
return false;
}
int main(){
int N;
cin>>N;
for(int i=0; i<N; i++)
cin>>s[i].name>>s[i].score;
sort(s, s+N, cmp); //使⽤sort排序
for(int i=0; i<N; i++)
cout<<s[i].name<<" "<<s[i].score<<endl;
return 0;
}。

相关文档
最新文档