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

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


海绵宝宝撒
浏览 914回答 5
5回答

白猪掌柜的

#include<iostream>using&nbsp;namespace&nbsp;std;#include<algorithm>#include<cstdlib>int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;m&nbsp;=&nbsp;(int&nbsp;*)malloc(sizeof(int)&nbsp;*&nbsp;n);&nbsp;&nbsp;&nbsp;&nbsp;//等价于int&nbsp;m[n];但是当n太大时程序可能会崩溃&nbsp;&nbsp;&nbsp;&nbsp;if(!m)//申请失败时&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("malloc");//报错&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);//结束程序&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;m[i];&nbsp;&nbsp;&nbsp;&nbsp;sort(m,&nbsp;m&nbsp;+&nbsp;n);&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;m[i]&nbsp;<<&nbsp;ends;//ends是空格&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}如果填的话就是从大到小排序:1234567891011121314151617181920212223242526#include<iostream>using&nbsp;namespace&nbsp;std;#include<algorithm>#include<cstdlib>bool&nbsp;cmp(int&nbsp;a,int&nbsp;b){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;>&nbsp;b;}int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;m&nbsp;=&nbsp;(int&nbsp;*)malloc(sizeof(int)&nbsp;*&nbsp;n);&nbsp;&nbsp;&nbsp;&nbsp;//等价于int&nbsp;m[n];但是当n太大时程序可能会崩溃&nbsp;&nbsp;&nbsp;&nbsp;if(!m)//申请失败时&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("malloc");//报错&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);//结束程序&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;m[i];&nbsp;&nbsp;&nbsp;&nbsp;sort(m,&nbsp;m&nbsp;+&nbsp;n,&nbsp;cmp);&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;m[i]&nbsp;<<&nbsp;ends;//ends是空格&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}&nbsp;说白了,第三个参数就是我们自己写的一个函数,这个函数只要返回只为int类型就可以了并且有两个参数就可以了,但是若真的想要做到排序,只要让(从小到大)这个函数里写return a<b;就可以了如果是从大到小就return a>b;12345/*cmp只是函数名称,是可以随便定义的。a和b的类型也不一定是int,可以是float、double、甚至你自己写的结构体。但注意你比较的元素不再是a&nbsp;>&nbsp;b*/int&nbsp;cmp(int&nbsp;a,&nbsp;int&nbsp;b){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;>&nbsp;b;//从大到小}如有一个结构体数组:1234struct&nbsp;node{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x,&nbsp;y,&nbsp;v;}a[100];那么cmp函数应该这么写:1234int&nbsp;cmp(struct&nbsp;node&nbsp;a,&nbsp;struct&nbsp;node&nbsp;b){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a.v&nbsp;>&nbsp;b.v;}按照v的大小来从大到小排序只需要:sort(a, a + 100, cmp);

郎朗坤

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

交互式爱情

●首先sort要包含algorithm头文件。●其次sort是std命名空间中的函数,要写std::sort,或者在最开始写using namespace std;●最后,C++中的sort很多情况下不需要你写cmp函数,像你的情况是比较两个int,可以直接这么写:sort(a+j,a+n-j+1);sort自己知道如何比较两个int的。而且即使是复杂的比较,也一般写仿函数而不是函数,因为仿函数更快。
打开App,查看更多内容
随时随地看视频慕课网APP