Board logo

標題: sort函式 [打印本頁]

作者: 呂晉豪    時間: 2024-6-28 15:37     標題: sort函式

本帖最後由 呂晉豪 於 2024-7-22 19:04 編輯

sort函式可以將陣列排序,有兩種用法:
1. sort(first, last);
first, last皆為陣列元素的指標(地址),排序的範圍為[first, last),也就是左包含右不包含,這種排序預設是由小排到大。
用法:
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int main() {
  4.     int arr[] = {5, 4, 3, 2, 1};
  5.     vector <int> v({5, 4, 3, 2, 1});

  6.     sort(begin(arr), end(arr));
  7.     for (int i = 0; i < 5; i++) {
  8.         cout << arr[i] << " ";
  9.     }
  10.     cout << endl;

  11.     sort(begin(v), end(v));
  12.     for (int i = 0; i < 5; i++) {
  13.         cout << v[i] << " ";
  14.     }
  15.     cout << endl;
  16.     return 0;
  17. }
複製代碼
2. sort(first, last, cmp);
此為自訂排序,如果想由大排到小,或者是對結構體排序,就要用這種方法。
排序的範圍仍然為[first, last),比較特別的是cmp這個東西,他是一個函式(指標)。
用法(由大排到小):
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. bool cmp (int a, int b) {
  4.     return a > b;
  5. }

  6. int main() {
  7.     int arr[] = {1, 2, 3, 4, 5};
  8.     vector <int> v({1, 2, 3, 4, 5});

  9.     sort(begin(arr), end(arr), cmp);
  10.     for (int i = 0; i < 5; i++) {
  11.         cout << arr[i] << " ";
  12.     }
  13.     cout << endl;

  14.     sort(begin(v), end(v), cmp);
  15.     for (int i = 0; i < 5; i++) {
  16.         cout << v[i] << " ";
  17.     }
  18.     cout << endl;
  19.     return 0;
  20. }
複製代碼
cmp函式會回傳布林值,函式的參數形態要跟陣列的型態一樣,以上例來說,可以想像成a在前面,b在後面,a>b代表前面的要比後面的大,也就是由大排到小。
用法(排序結構體):
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. struct data {
  4.     int c;
  5.     int d;
  6. };

  7. bool cmp1 (data a, data b) {
  8.     return a.c > b.c;
  9. }

  10. bool cmp2 (data a, data b) {
  11.     return a.d > b.d;
  12. }

  13. int main() {
  14.     vector <data> v(5);
  15.     v[0] = {1, 5};
  16.     v[1] = {2, 4};
  17.     v[2] = {3, 3};
  18.     v[3] = {4, 2};
  19.     v[4] = {5, 1};

  20.     sort(begin(v), end(v), cmp1);
  21.     for (int i = 0; i < 5; i++) {
  22.         cout << v[i].c << " " << v[i].d << endl;
  23.     }
  24.     cout << endl;

  25.     sort(begin(v), end(v), cmp2);
  26.     for (int i = 0; i < 5; i++) {
  27.         cout << v[i].c << " " << v[i].d << endl;
  28.     }
  29.     cout << endl;
  30.     return 0;
  31. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2