一.sort函数是什么?
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。
二.sort函数简介
语法
Sort(start,end,cmp)
参数
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
简单来说,第一个参数(start)就是需排序数组名+排序起始数在数组中的下标;第二个参数(end)即需排序数组名+排序起始数+排序数个数;第三个参数较为复杂,我等下再说……
功能
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。
一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。
相对于普通的排序算法,sort()函数在快速排序(详见C++快速排序)的基础上,又进行了优化,时间复杂度为n*log2(n),执行效率较高。
三.sort()函数的CMP
1.无需修改,直接套用
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10];
for(int i=0;i<10;i++) scanf("%d",&a[i]);
sort(a,a+10);
for(int i=0;i<10;i++) printf("%d",a[i]);
return 0;
}
2.较为简单的排序条件修改
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
return x % 10 > y % 10;
}
int main(){
int num[10] = {65,59,96,13,21,80,72,33,44,99};
sort(num,num+10,cmp);
for(int i=0;i<10;i++){
cout<<num[i]<<" ";
}//输出结果:59 99 96 65 44 13 33 72 21 80
return 0;
}
3.较为复杂的排序条件自定义
比如每一个学生有四科成绩,我们需要根据学生的四科成绩的平均分高低进行排名,那么这个cmp函数我们就可以定义为:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Student{
string name;
double score[4];
};
bool cmp_score(Student x,Student y){
double average_x,average_y;
average_x = (x.score[0]+x.score[1]+x.score[2]+x.score[3])/4;
average_y = (y.score[0]+y.score[1]+y.score[2]+y.score[3])/4;
return average_x > average_y;
}
int main(){
Student stu[3];
string n;
int s;
for(int i=0;i<3;i++){
cin>>stu[i].name;
for(int j=0;j<4;j++){
cin>>stu[i].score[j];
}
}
sort(stu,stu+3,cmp_score);
for(int i=0;i<3;i++){
cout<<stu[i].name<<" ";
for(int j=0;j<4;j++){
cout<<stu[i].score[j]<<" ";
}
cout<<endl;
}
return 0;
}
总的来说,当CMP返回值为true(符合条件)时,无需交换;反之,返回值为false(不符合条件)时,需要交换。
四.总结
sort()函数是个很有用的妙招,希望大家善用!
本文详细介绍了C++中的sort函数,包括其基本功能、语法、时间复杂度以及如何通过cmp函数实现自定义排序。示例中展示了从简单的升序排序到根据特定条件(如数字的个位数、学生平均分)进行排序的用法,强调了sort函数在排序效率和灵活性上的优势。



9377

被折叠的 条评论
为什么被折叠?



