为了账号安全,请及时绑定邮箱和手机立即绑定

请问在C++ algorithm 里的sort函数怎么用?

请问在C++ algorithm 里的sort函数怎么用?

海绵宝宝撒 2019-07-08 16:10:07
C++ algorithm 里的sort函数怎么用
查看完整描述

5 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

#include<iostream>

using namespace std;

#include<algorithm>

#include<cstdlib>

int main(void)

{

    int n;

    cin >> n;

    int * m = (int *)malloc(sizeof(int) * n);

    //等价于int m[n];但是当n太大时程序可能会崩溃

    if(!m)//申请失败时

    {

           perror("malloc");//报错

           exit(-1);//结束程序

    }

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

        cin >> m[i];

    sort(m, m + n);

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

        cout << m[i] << ends;//ends是空格

    return 0;

}

如果填的话就是

从大到小排序:

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

#include<iostream>

using namespace std;

#include<algorithm>

#include<cstdlib>

bool cmp(int a,int b)

{

    return a > b;

}

int main(void)

{

    int n;

    cin >> n;

    int * m = (int *)malloc(sizeof(int) * n);

    //等价于int m[n];但是当n太大时程序可能会崩溃

    if(!m)//申请失败时

    {

        perror("malloc");//报错

        exit(-1);//结束程序

    }

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

        cin >> m[i];

    sort(m, m + n, cmp);

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

        cout << m[i] << ends;//ends是空格

    return 0;

}

 说白了,第三个参数就是我们自己写的一个函数,这个函数只要返回只为int类型就可以了并且有两个参数就可以了,但是若真的想要做到排序,只要让(从小到大)这个函数里写return a<b;就可以了如果是从大到小就return a>b;

1

2

3

4

5

/*cmp只是函数名称,是可以随便定义的。a和b的类型也不一定是int,可以是float、double、甚至你自己写的结构体。但注意你比较的元素不再是a > b*/

int cmp(int a, int b)

{

    return a > b;//从大到小

}

如有一个结构体数组:

1

2

3

4

struct node

{

    int x, y, v;

}a[100];

那么cmp函数应该这么写:

1

2

3

4

int cmp(struct node a, struct node b)

{

    return a.v > b.v;

}

按照v的大小来从大到小排序只需要:

sort(a, a + 100, cmp);


查看完整回答
反对 回复 2019-07-13
?
郎朗坤

TA贡献1921条经验 获得超9个赞

#include <algorithm>
void sort( iterator start, iterator end );
void sort( iterator start, iterator end, StrictWeakOrdering cmp );
第一个只需要传递你要排序的串(整形数组等都行)的头指针(数组第一个元素的指针)与数组最后元素的下一个位置,sort是一个模板
第二个前面两个参数同第一,但第三个参数是传递一个你定义用于排序的函数(返回比较的大小值,如strcmp或自定义的都行),因为第一个用的是默认的

查看完整回答
反对 回复 2019-07-13
?
交互式爱情

TA贡献1712条经验 获得超3个赞

●首先sort要包含algorithm头文件。

●其次sort是std命名空间中的函数,要写std::sort,或者在最开始写using namespace std;

●最后,C++中的sort很多情况下不需要你写cmp函数,像你的情况是比较两个int,可以直接这么写:
sort(a+j,a+n-j+1);
sort自己知道如何比较两个int的。而且即使是复杂的比较,也一般写仿函数而不是函数,因为仿函数更快。

查看完整回答
反对 回复 2019-07-13
  • 5 回答
  • 0 关注
  • 919 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信