sort函数包含在头文件为#include的c++标准库中,该函数专门用来对容器或普通数组中指定范围内的元素进行排序,sort() 函数是基于快速排序实现的。(C 语言的 qsort)
函数原型:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); 或void sort (RandomAccessIterator first, RandomAccessIterator last);
参数:
返回值: 无返回值。
comp(比较函数): < 升序;> 降序。
#include<iostream> #include<algorithm> using namespace std; int main(){ int a[]={33,12,20,66,90,11,20,4,5,50}; sort(a,a+10);//无比较函数,默认a从小到大排序 for(int i = 0; i < 10; i++) printf("%d ",a[i]); return 0; }
从大到小排序:
#include<iostream> #include<algorithm> using namespace std; bool cmp(int a, int b){ return a > b;//从大到小排序 } int main(){ int a[]={33,12,20,66,90,11,20,4,5,50}; sort(a, a+10, cmp); for(int i = 0; i < 10; i++) printf("%d ",a[i]); return 0; }
#include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef struct course{ char name[20];//名称 int score;//分数 int credit;//学分 }Course; bool cmp(Course a, Course b){ if(a.credit != b.credit) return a.credit > b.credit; else if(a.score != b.score) return a.score > b.score; else return strcmp(a.name, b.name)==1?true:false; } int main(){ Course a[4]={{"math", 92, 6}, {"english", 60, 4}, {"java", 88, 6}, {"c", 92, 6}}; sort(a, a+4, cmp);//学分不同按照学分从大到小排序,否则分数不同按照分数从大到小排序,否则按照名称从大到小排序 for(int i = 0; i < 4; i++) printf("%s %d %d\n",a[i].name, a[i].score, a[i].credit); return 0; }
strcmp
bool operator < (const className & rhs) const; 如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用;
#include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef struct course{ char name[20];//名称 int score;//分数 int credit;//学分 inline bool operator < (const course &x) const{//按照score从大到小排序 return score > x.score; } }Course; //struct cmp{//重载方法二 // bool operator() (const course &a,const course &b) const{ // return a.score < b.score; // } //}; int main(){ Course a[4]={{"math", 92, 6}, {"english", 60, 4}, {"java", 88, 6}, {"c", 92, 6}}; sort(a, a+4); // sort(a, a+4, cmp());//重载方法二 for(int i = 0; i < 4; i++) printf("%s %d %d\n",a[i].name, a[i].score, a[i].credit); return 0; }
int,double等基础类型,可以直接进行比较greater() 递减, less() 递增
#include<iostream> #include<algorithm> using namespace std; int main(){ int a[]={33,12,20,66,90,11,20,4,5,50}; double b[] = {33,12,20,66,90,11,20,4,5,50}; sort(a, a+10, greater<int>());//less<T>()递减,T为int、double等基础类型 sort(b, b+10, less<double>());//less<T>()递增,T为int、double等基础类型 for(int i = 0; i < 10; i++) printf("%d ",a[i]); printf("\n"); for(int i = 0; i < 10; i++) printf("%.1lf ",b[i]); return 0; }