sort 排序

警告
本文最后更新于 2018-06-14,文中内容可能已过时。

sort 使用#include<algorithm>头文件,

sort(开始地址,结束地址,排序方式),其中第三参数可以没有,则默认为升序排序。

或者简单的用 less<参数类型>()表示升序

greater<参数类型>()表示降序

也可以用一个 bool 型函数,比如:

1
2
3
4
5
bool cmp(int a,int b){

       return a>b;//表从大到小,即降序

}

假设自己定义了一个结构体 node

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
typedef struct node

{

int a;

int b;

double c;

}note;

有一个 node 类型的数组 node arr[100],想对它进行排序:先按 a 值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,就按 c 降序排列。就可以写这样一个比较函数:

以下是代码片段:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
bool cmp(node x,node y)

{

if(x.a!=y.a) return x.a<y.a;

if(x.b!=y.b) return x.b>y.b;

return x.c>y.c;

}

sort() 函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组,数组类型可以是 int,char 等。

实例:先降序再升序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>

#include<algorithm>

using namespace std;

typedef struct data{

    int a;

    double b;

}date;

bool cmp(date a,date b){

    if(a.b!=b.b) return a.b>b.b;

    return a.a<b.a;

}

int main(){

    date a[3]={{5,56.5},{4,56.5},{8,85}};

    sort(a,a+3,cmp);

    for(int i=0;i<3;i++)

        cout<<a[i].a<<"-"<<a[i].b<<endl;

    cout<<endl;

    return 0;

}

传送门

Buy me a coffee~
支付宝
微信
0%