標題:
sort函式
[打印本頁]
作者:
呂晉豪
時間:
2024-6-28 15:37
標題:
sort函式
本帖最後由 呂晉豪 於 2024-7-22 19:04 編輯
sort函式可以將陣列排序,有兩種用法:
1. sort(first, last);
first, last皆為陣列元素的指標(地址),排序的範圍為[first, last),也就是左包含右不包含,這種排序預設是由小排到大。
用法:
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {5, 4, 3, 2, 1};
vector <int> v({5, 4, 3, 2, 1});
sort(begin(arr), end(arr));
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
sort(begin(v), end(v));
for (int i = 0; i < 5; i++) {
cout << v[i] << " ";
}
cout << endl;
return 0;
}
複製代碼
2. sort(first, last, cmp);
此為自訂排序,如果想由大排到小,或者是對結構體排序,就要用這種方法。
排序的範圍仍然為[first, last),比較特別的是cmp這個東西,他是一個函式(指標)。
用法(由大排到小):
#include <bits/stdc++.h>
using namespace std;
bool cmp (int a, int b) {
return a > b;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
vector <int> v({1, 2, 3, 4, 5});
sort(begin(arr), end(arr), cmp);
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
sort(begin(v), end(v), cmp);
for (int i = 0; i < 5; i++) {
cout << v[i] << " ";
}
cout << endl;
return 0;
}
複製代碼
cmp函式會回傳布林值,函式的參數形態要跟陣列的型態一樣,以上例來說,可以想像成a在前面,b在後面,a>b代表前面的要比後面的大,也就是由大排到小。
用法(排序結構體):
#include <bits/stdc++.h>
using namespace std;
struct data {
int c;
int d;
};
bool cmp1 (data a, data b) {
return a.c > b.c;
}
bool cmp2 (data a, data b) {
return a.d > b.d;
}
int main() {
vector <data> v(5);
v[0] = {1, 5};
v[1] = {2, 4};
v[2] = {3, 3};
v[3] = {4, 2};
v[4] = {5, 1};
sort(begin(v), end(v), cmp1);
for (int i = 0; i < 5; i++) {
cout << v[i].c << " " << v[i].d << endl;
}
cout << endl;
sort(begin(v), end(v), cmp2);
for (int i = 0; i < 5; i++) {
cout << v[i].c << " " << v[i].d << endl;
}
cout << endl;
return 0;
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2