5 回答
TA贡献1848条经验 获得超2个赞
#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);
TA贡献1843条经验 获得超7个赞
●首先sort要包含algorithm头文件。
●其次sort是std命名空间中的函数,要写std::sort,或者在最开始写using namespace std;
●最后,C++中的sort很多情况下不需要你写cmp函数,像你的情况是比较两个int,可以直接这么写:
sort(a+j,a+n-j+1);
sort自己知道如何比较两个int的。而且即使是复杂的比较,也一般写仿函数而不是函数,因为仿函数更快。
- 5 回答
- 0 关注
- 420 浏览
添加回答
举报