亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在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 關注
  • 1038 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號