sort()函数

使用sort()函数在做简单排序算法时候是非常好的方法。

sort(buffer,buffer+n,cmp); buffer为待排序数组的首地址,buffer+n为待排序数组的最后一个数据的地址。cmp为自定义的排序规则函数,可省略。

sort()函数默认是为升序排列,允许排序类型包括数值/字符/字符串。sort()也可以对结构体进行排序。

cmp函数的返回值为true和false或1和0,若为true/1,则sort()函数为升序排列,若为false/0,则sort()函数为降序排列。

### 3.1 `sort` 函数的基本用法 在 C++ 中,`sort` 是一个高效的排序函数,属于 `<algorithm>` 标准库的一部分。它使用类似于快速排序的算法,时间复杂度为 $O(n \log n)$,具有较高的执行效率[^2]。其基本语法为: ```cpp sort(start, end, compare_fun); ``` 其中: - `start` 是排序数组的起始地址(包含在排序范围内)。 - `end` 是排序数组的结束地址(不包含在排序范围内)。 - `compare_fun` 是可选的比较函数函数对象,用于定义排序规则。 默认情况下,`sort` 按照升序排列数组。例如,对一个整型数组进行升序排序的示例代码如下: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int a[4]; for (int i = 0; i <= 3; i++) { cin >> a[i]; } sort(a, a + 4); // 从第一个元素到最后一个元素升序排序 for (int i = 0; i <= 3; i++) { cout << a[i] << " "; } return 0; } ``` 该代码展示了 `sort` 的基本使用方式,适用于对基本数据类型进行排序[^1]。 ### 3.2 自定义比较函数进行排序 若需要对数组进行降序排序,可以通过提供自定义比较函数或使用 `greater<int>()` 实现。例如: ```cpp sort(arr, arr + 5, greater<int>()); // 降序排列 ``` 也可以自定义比较函数 `cmp`,如下所示: ```cpp bool cmp(int x, int y) { return x > y; // 降序排列 } sort(arr, arr + 5, cmp); ``` 上述方法不仅适用于基本数据类型,还可以扩展到复杂数据结构(如结构体)的排序中[^4]。 ### 3.3 对结构体数组进行排序 在实际应用中,结构体排序需要通过自定义比较函数来指定排序依据。例如,定义一个结构体 `Student` 并按 `sum` 字段降序排列: ```cpp struct Student { string str; int sum; }; bool cmp(Student a, Student b) { if (a.sum == b.sum) { return a.str < b.str; // 若 sum 相同,按姓名升序排列 } return a.sum > b.sum; // 否则按 sum 降序排列 } ``` 随后,调用 `sort` 函数进行排序: ```cpp sort(student, student + n, cmp); ``` 该方法利用了 `sort` 的灵活性,使结构体排序更加简洁高效[^2]。 ### 3.4 对 `vector` 容器进行排序 `sort` 函数同样适用于 `vector` 容器。例如,对一个 `vector<int>` 进行降序排序: ```cpp vector<int> vArr(arr, arr + 5); sort(vArr.begin(), vArr.end(), greater<int>()); // 降序排列 ``` 若需要对 `vector<Student>` 进行排序,同样可以使用自定义比较函数: ```cpp vector<Student> students; sort(students.begin(), students.end(), cmp); ``` 上述方法体现了 `sort` 在不同数据结构中的广泛适用性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值