sort()函数可以将一个容器或者数组的值进行排序,还可以自定义排序方式。sort()是基于头文件
#include
#include
using namespace std;
int main() {
int arr[] = { 2,4,7,1,3 };
return 0
}
我们可以通过写
sort(arr, arr + 5);
我们就可以将arr中从开始的元素到第5个元素按从小到大的顺序进行排序。
如果我们写
sort(arr + i, arr + j);
那么被排序的就是arr[i]到arr[j - i],其他元素将保持原位置。
如果我们希望arr中的元素从大到小排序(或者按照某一个规则进行排序),我们可以再为sort传入第三个参数--“排序方法”:
sort(arr, arr + 5, greater());
其中greater表示“跟大”的意思,
自此我们的程序会成为:
#include
#include
using namespace std;
int main() {
int arr[] = { 2,4,7,1,3 };
//=============排序从小到大======
sort(arr, arr + 5);
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
//=============从大到小======
sort(arr, arr + 5, greater());
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
//=============排序中间元素======
sort(arr + 1, arr + 4);
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
执行后输出如下
我们可以之后再写一个sort,在这个sort中,我们可以再为sort传入第三个参数--“排序方法”。
首先我们在int main()之前加上:
cmp函数,定义要为bool类型,具体就是传入x,y,两个参数进行比较。
如果返回值为真就会将第一个参数排在第二个参数前(注意,不能出现等号,如果出现等号,一定要给该值为false)。理解困难的话,其实就是看返回值这,返回x > y,前面大于后面就是从大到小排序。
bool cmp(int x, int y){
return x > y;
}
并且在sort的第三个参数中传入cmp,sort函数是系统定义好的,可以直接支持函数地址作为参数。
sort(arr, arr + 10, cmp);
具体代码如下
#include
#include
using namespace std;
bool cmp(int x, int y){
return x > y;
}
int main() {
int arr[] = { 2,4,7,1,3,5,9,6,8,10};
sort(arr, arr + 10, cmp);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
执行后输出如下
例如我们要将一个数组arr按照除3的余数从小到大排序来进行排序。
我们先写一个cmp,因为可能有相等的余数,如果相等我们按照其本身的大小进行从小到大排序。
bool cmp(int x, int y){
if(x % 3 != y % 3)
return x % 3 < y % 3;
else
return x < y;
}
具体代码如下
#include
#include
using namespace std;
bool cmp(int x, int y){
if(x % 3 != y % 3)
return x % 3 < y % 3;
else
return x < y;
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10};
sort(arr, arr + 10, cmp);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
运行结果如下
下面我们再来了解sort对于结构体的排序,我们可以按照结构体中某个元素来进行排序。
例如,我们写一个学生的结构体,里面有姓名和成绩,我们要按照成绩从大到小排序。
我们先写一个结构体Student
struct Student{
string name;
int score;
};
我们要按照得分来进行排序
bool cmp(Student x, Student y){
return x.score > y.score;
}
具体代码如下
#include
#include
using namespace std;
struct Student {
string name;
int score;
};
bool cmp(Student x, Student y) {
return x.score > y.score;
}
int main() {
Student stu[4];
stu[0].name = "A";
stu[0].score = 80;
stu[1].name = "B";
stu[1].score = 75;
stu[2].name = "C";
stu[2].score = 96;
stu[3].name = "D";
stu[3].score = 85;
sort(stu, stu + 4, cmp);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << ":" << stu[i].score << endl;
}
return 0;
}
运行结果如下
以上就是我对sort函数的见解,如果此文章有错误或者有不同的见解欢迎评论或者私信。