c++ sort函数怎么用 c++ sort排序算法实例


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排序

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 表达式:

vector nums = {-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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.