5 回答

TA貢獻1893條經(jīng)驗 獲得超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; } |
說白了,第三個參數(shù)就是我們自己寫的一個函數(shù),這個函數(shù)只要返回只為int類型就可以了并且有兩個參數(shù)就可以了,但是若真的想要做到排序,只要讓(從小到大)這個函數(shù)里寫return a<b;就可以了如果是從大到小就return a>b;
1 2 3 4 5 | /*cmp只是函數(shù)名稱,是可以隨便定義的。a和b的類型也不一定是int,可以是float、double、甚至你自己寫的結構體。但注意你比較的元素不再是a > b*/ int cmp(int a, int b) { return a > b;//從大到小 } |
如有一個結構體數(shù)組:
1 2 3 4 | struct node { int x, y, v; }a[100]; |
那么cmp函數(shù)應該這么寫:
1 2 3 4 | int cmp(struct node a, struct node b) { return a.v > b.v; } |
按照v的大小來從大到小排序只需要:
sort(a, a + 100, cmp);

TA貢獻1921條經(jīng)驗 獲得超9個贊
- 5 回答
- 0 關注
- 1036 瀏覽
添加回答
舉報