一.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()函数是个很有用的妙招,希望大家善用!