C++中sort()排序函数使用方法

一.使用

1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序。

2.sort函数中的三个参数:
        sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第一个参数first:是要排序的数组的起始地址。(必填)

(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)(必填)

(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。

sort函数的基本用法如下:

sort(arr, arr + n); //对数组arr的前n个元素进行升序排序

如果要按降序排序,可以使用如下代码:

sort(arr, arr + n, greater<int>()); //对数组arr的前n个元素进行降序排序

例:

#include<iostream>
#include<algorithm>
u
### C++ 中 `sort` 函数使用方法C++ 的标准库 `<algorithm>` 中,提供了强大的排序工具——`std::sort()`。该函数可以用于对数组或容器中的元素进行排序,默认情况下按照升序排列。 #### 默认排序方式 当未提供第三个参数时,`std::sort()` 将会基于元素之间的比较操作符 `<` 进行升序排序[^1]。以下是默认排序的一个简单示例: ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; int size = sizeof(arr) / sizeof(arr[0]); sort(arr, arr + size); for (int i = 0; i < size; ++i) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 此程序将输出按升序排列的结果: `0 1 2 3 4 5 6 7 8 9`. --- #### 自定义排序规则 如果希望改变默认的排序顺序(例如降序),可以通过传递一个自定义的比较函数作为第三个参数来实现。这个比较函数应该返回布尔值,表示两个元素的关系。下面是一个从大到小排序的例子[^2]: ```cpp #include <iostream> #include <algorithm> using namespace std; bool customCompare(int a, int b) { return a > b; // 返回 true 表示 a 应放在 b 前面 } int main() { int arr[] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; int size = sizeof(arr) / sizeof(arr[0]); sort(arr, arr + size, customCompare); for (int i = 0; i < size; ++i) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 运行以上代码后,输出将是降序序列: `9 8 7 6 5 4 3 2 1 0`. --- #### 时间复杂度分析 `std::sort()` 实现的是快速排序的一种变体,其平均时间复杂度为 \(O(n \log_2 n)\)[^3]。这使得它相较于传统的冒泡排序或选择排序更加高效,在处理大规模数据集时表现尤为突出。 --- #### 容器支持 除了原始数组外,`std::sort()` 同样适用于 STL 容器(如 `vector`, `deque`)。需要注意的是,对于这些容器而言,应改用迭代器代替指针指定范围[^4]。如下所示是对向量进行排序的操作: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(vec.begin(), vec.end()); for(auto num : vec){ cout << num << " "; } cout << endl; return 0; } ``` 这段代码同样实现了升序排序并打印结果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值