C++ algorithm 里的sort函数怎么用

我不懂最后那个参数是什么意思?... 我不懂最后那个参数是什么意思? 展开
 我来答
匿名用户
2015-12-11
展开全部

可以不填,如果不填就是从小到大排序。

#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;
}

如果填的话就是

从大到小排序:

#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;

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

如有一个结构体数组:

struct node
{
    int x, y, v;
}a[100];

那么cmp函数应该这么写:

int cmp(struct node a, struct node b)
{
    return a.v > b.v;
}

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

sort(a, a + 100, cmp);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式