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);
- 5 回答
- 0 关注
- 982 浏览
添加回答
举报