1.升序(默认情况)
#include<iostream>
using namespace std;
#include<algorithm>
int main()
{
int a[10]={5,8,9,6,5,2,3,6,4,8};
sort(a,a+10);//默认情况为升序
int i;
for(i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
2.降序
*#include<iostream>
using namespace std;
#include<algorithm>
int main()
{
int a[10]={5,8,9,6,5,2,3,6,4,8};
sort(a,a+10,greater<int>());//传入第三个参数——比较函数,实现降序
int i;
for(i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
3.自定义函数实现降序(或升序)
#include<iostream>
using namespace std;
#include<algorithm>
#include<stdbool.h>
bool cmp(int num1, int num2)
{
return num1 > num2; // 可以简单理解为 > 降序排列; < 升序排列
}
int main()
{
int a[10]={5,8,9,6,5,2,3,6,4,8};
sort(a,a+10,cmp); //自定义排序实现降序
int i;
for(i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
4.结构体数组排序
在进行结构体数组排序时我遇到了devcpp的警告:[Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
原因是对结构体数字初始化时用{}。
#include<iostream>
using namespace std;
#include<algorithm>
struct Student// 学生结构体
{
string name; // 学生姓名
int grade; // 学生分数
Student(); // 无参数构造函数
Student(string name, int grade) : name(name), grade(grade) {}; // 有参数构造函数
};
bool cmp(Student s1, Student s2) { // 自定义排序
if (s1.grade != s2.grade) { // 如果学生成绩不相同
return s1.grade > s2.grade; // 则按照成绩降序排列
}
return s1.name < s2.name; // 否则按照姓名升序排列
}
int main()
{
int i;
Student s[8]=
{
{"Bob",80},{"Ali",90},{"Ann",85},{"Liming",90},{"Trump",79},{"Fury",58},{"Jam",62},{"Lucy",89}
};
sort(s,s+8,cmp);
for(i=0;i<8;i++)
{
cout<<s[i].name<<" * "<<s[i].grade<<endl;
}
return 0;
}