sort()函数的头文件是#include<algorithm>,所以 直接定义的数组 和 vector 都可以用
sort的语法是sort(start,end,cmp),其中第三个参数cmp是自定义比较函数,可以省略
sort()的第三个参数:自定义比较函数【重点】
比较函数的参数是两个待比较变量,返回值是比较出来的bool值
内部排序函数默认是小于关系,排序结果为升序
做题时,要自己灵活设计cmp比较函数
/*sort_stl.cpp*/
#include<bits/stdc++.h>
using namespace std;
int arr[]={2,3,4,1,5};
int n = 5;
vector<int> arr2{6,8,9,7,10};
bool cmp(int a, int b){
return a>b;
}
struct Point{
int x,y;
}a,b,c;
bool cmp2(Point a, Point b){
if (a.x != b.x){
return a.x < b.x;
}
return a.y < b.y;
}
struct stu{
int num,c,m,e,sum;
}student[305];
bool cmp3(stu a,stu b){//如果认为第一个参数比第二个小,也就是第一个参数需要排在第二个参数前面时返回true
if(a.sum<b.sum) return 1;
else if(a.sum==b.sum && a.c<b.c) return 1;
else if(a.sum==b.sum && a.c==b.c && a.num>b.num) return 1;
return 0;
}
int main(){
//sort()快速排序 O(nlogn)
sort(arr, arr+5);//参数:排序开始指针,排序结束指针(最后一个元素的下一个元素的指针)
for(int i = 0; i<n; i++){
printf("%d ",arr[i]);
}
sort(arr2.begin(), arr2.end());
for(int i = 0; i<n; i++){
printf("%d ",arr2[i]);
}
printf("\n");
//可以排序
string sortstr = "adbcgfe";
sort(sortstr.begin(),sortstr.end());
cout<< "string also can be sorted:" ;
cout<< sortstr <<endl;
/* sort()的第三个参数:自定义比较函数
比较函数的参数是两个待比较变量,返回值是比较的bool值
内部排序函数默认是小于关系,排序结果为升序
*/
sort(arr2.begin(), arr2.end(), cmp);
printf("使用比较函数后:\n");
for(int i = 0; i<n; i++){
printf("%d ",arr2[i]);
}
printf("\n");
//注意:自己定义的结构体,一定要写比较函数
a.x=1;
a.y=2;
b.x=1;
b.y=3;
c.x=2;
c.y=2;
struct Point arr3[]={a,b,c};
sort(arr3, arr3+10,cmp2);
int m = sizeof(arr3)/sizeof(arr3[0]);
printf("结构体使用比较函数后:\n");
for(int i = 0; i<m; i++){
printf("%d ",arr2[i]);
}
//system("pause");
return 0;
}