C++中sort函数定义在头文件中,使用IntroSort算法实现高效排序。1. 可对数组或vector等容器排序,采用左闭右开区间;2. 默认升序,支持通过greater()实现降序;3. 支持自定义比较函数或lambda表达式,如按绝对值、个位数或结构体成员排序;4. 结构体排序时可结合const引用提高效率。掌握其三个参数即可灵活应用。
在C++中,sort函数是标准模板库(STL)中的一个非常实用的排序工具,定义在头文件 gorithm> 中。它可以对数组、vector等容器中的元素进行高效排序,默认使用快速排序+堆排序+插入排序的混合算法(IntroSort),时间复杂度通常为 O(n log n)。
std::sort(起始地址, 结束地址);
注意:结束地址是不包含的,即左闭右开区间 [first, last)。
对普通数组进行升序排序:
#include#include using namespace std; int main() { int arr[] = {5, 2, 8, 1, 9}; int n = sizeof(arr) / sizeof(arr[0]); sort(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } // 输出:1 2 5 8 9 return 0; }
vector 是更常用的动态数组,用法类似:
#include#include #include using namespace std; int main() { vector vec = {3, 7, 2, 5, 1}; sort(vec.begin(), vec.end()); for (int x : vec) { cout << x << " "; } // 输出:1 2 3 5 7 return 0; }
可以通过添加第三个参数改变排序规则,例如使用 greater() 实现降序:
sort(vec.begin(), vec.end(), greater()); // 排序后:7 5 3 2 1
如果想按特定逻辑排序,比如按绝对值大小,可以传入自定义比较函数或 lambda 表达式:
vectornums = {-3, 1, -5, 2, 4}; // 按绝对值从小到大排序 sort(nums.begin(), nums.end(), [](int a, int b) { return abs(a) < abs(b); }); // 结果:1, 2, -3, 4, -5
也可以写成函数形式:
bool cmp(int a, int b) {
return a % 10 < b % 10; // 按个位数排序
}
sort(arr, arr + n, cmp);
常用于根据结构体某个字段排序:
struct Student {
string name;
int score;
};
vector students = {{"Alice", 85}, {"Bob", 90}, {"Charlie", 78}};
// 按分数从高到低排序
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score > b.score;
});
基本上就这些。掌握 sort 函数的关键是理解它的三个参数:起始、结束、比较规则。配合 lambda 使用,灵活又高效。实际编程中几乎不用手写排序算法,直接调用 sort 就行。注意别忘了包含 头文件。
# go
# 工具
# ai
# c++
# ios
# stream
# 排序算法
# sort
# const
# 结构体
# 插入排序
# 快速排序
# int
# Lambda
# 堆
# 算法
# 自定义
# 升序
# 头文件
# 降序
# 就行
# 可以通过
# 它可以
# 别忘了
# 第三个
# 可对
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
PythonWeb前后端整合项目教程_FastAPIReact完整实例
Win11怎么设置默认视频播放器_Windows 11关联媒体文件打开方式【步骤】
如何使用Golang defer优化性能_减少不必要的函数调用
Python项目回滚策略_发布安全说明【指导】
为什么Go建议使用error接口作为错误返回_Go Error接口设计原因说明
Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理
Windows 11怎么更改锁屏超时时间_Windows 11电源选项中设置屏幕关闭时间
Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)
Golang如何测试HTTP中间件_Golang HTTP中间件功能测试实践
Win11如何设置电源计划_Win11电源计划优化教程【攻略】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Win11怎么查看激活状态_查询Windows 11是否已永久激活【详解】
MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】
php转exe用什么工具打包快_高效打包软件推荐【汇总】
Win11怎么关闭透明效果_Windows11个性化颜色关闭透明
windows如何修改文件默认打开方式_windows设置程序关联教程
如何使用Golang实现跨域请求支持_Golang CORS配置与处理方法
如何在Golang中验证模块完整性_Golanggo.sum校验与安全实践
全球各国上班时间表外贸邮件时间
PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】
如何在 Go 中可靠地测试含 time.Time 字段的结构体
C#如何在一个XML文件中查找并替换文本内容
Win10闹钟铃声怎么自定义 Win10闹钟自定义铃声教程【方法】
如何在JavaScript中动态拼接PHP的base_url与JS变量
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Win11怎么把图标拖到任务栏_Win11固定应用快捷方式指南【方法】
Django密码修改后会话失效的解决方案
如何使用Golang配置安全开发环境_防止敏感信息泄露
Win11怎么开启游戏模式_Win11优化游戏帧数性能【教程】
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】
Python数据挖掘核心算法实践_聚类分类与特征工程
如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例
C++中引用和指针有什么区别?(代码说明)
Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】
Win11怎么设置屏保时间_调整Win11屏幕保护等待时间【详解】
微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】
Win11时间怎么同步到原子钟 Win11高精度时间同步设置【指南】
Windows10如何更改桌面图标间距_Win10注册表WindowMetrics修改
如何在Golang中引入测试模块_Golang测试包导入与使用实践
php打包exe怎么传递参数_命令行参数接收方法【解答】
C++如何获取CPU核心数?(std::thread::hardware_concurrency)
如何在Golang中处理二进制数据_Golang io与encoding/binary二进制操作方法
Python多进程教程_multiprocessing模块实战
Linux如何使用Curl发送请求_Linux下API接口测试与文件下载技巧【步骤】
Win11怎么设置虚拟内存_Windows 11优化内存性能提升速度【技巧】
如何使用Golang处理静态文件缓存_提高页面加载速度
MySQL 中使用 IF 和 CASE 实现查询字段的条件映射
Python网络异常模拟_测试说明【指导】
Win11如何设置自动关机 Win11定时关机命令使用教程【技巧】
2025-12-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。