sort()函数详解

sort()函数可以将一个容器或者数组的值进行排序,还可以自定义排序方式。sort()是基于头文件<algorithm>库下的一个函数,所以要调用sort(),就需要添加头文件。

基本排序方法

#include<iostream>
#include<algorithm>
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<int>());

其中greater表示“跟大”的意思,<int>表示待排序的数组元素类型为int,整个代码表示让一个元素类型为整数的数组从大到小排序 。

四.最终代码

自此我们的程序会成为:

#include<iostream>
#include<algorithm>
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<int>());
    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类型,具体就是传入xy,两个参数进行比较。

如果返回值为真就会将第一个参数排在第二个参数前(注意,不能出现等号,如果出现等号,一定要给该值为false)。理解困难的话,其实就是看返回值这,返回x > y,前面大于后面就是从大到小排序。

bool cmp(int x, int y){
    return x > y;
}

并且在sort的第三个参数中传入cmpsort函数是系统定义好的,可以直接支持函数地址作为参数。

sort(arr, arr + 10, cmp);

具体代码如下

#include<iostream>
#include<algorithm>
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<iostream>
#include<algorithm>
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<iostream>
#include<algorithm>
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函数的见解,如果此文章有错误或者有不同的见解欢迎评论或者私信。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐