排序

1. sort简介
  • 头文件: 包含在

    中,使用前需要#include 或使用万能头文件<bits/stdc++.h>

  • 算法特性: C++标准库中的函数模板,使用快速排序(QuickSort)或改进算法,平均时间复杂度为

    O(nlog⁡n)

  • 适用范围: 可对任何可比较元素进行排序,无需关心内部具体实现

2.sort的用法
  • 基本语法: sort(起始地址,结束地址的下一位,*比较函数)
  • 数组排序示例:
    • 定义数组int a[1000]
    • 输入n和数组元素
    • 排序语句:sort(a+1, a+n+1) // 左闭右开区间[1,n+1)
    • 默认规则: 不写比较函数时默认使用小于号比较,结果为升序
  • vector排序:
    • 使用迭代器:sort(v.begin(), v.end())
    • 输出方式:常规for循环或for(auto i:v)遍历
    • 区间特性: 同样遵循左闭右开原则,begin()指向首元素,end()指向末元素的下一位
    • 输出技巧: 可使用条件判断控制末尾空格/换行:"\n"[i==n]
3. 自定义比较函数
  • 函数形式:
    • 定义bool cmp(const int &u, const int &v)
    • 调用时传入函数名:sort(v.begin(), v.end(), cmp)
  • lambda表达式:
    • 语法:捕获列表
    • 示例:sort(v.begin(), v.end(), [](const int &u, const int &v){return u > v;})
  • 结构体重载:
    • 重载operator<实现多关键字排序
    • 示例:先按u排序,u相等时按v排序
  • 注意事项:
    • 比较函数返回值必须为bool类型
    • 结构体重载时参数只有一个,作为右操作数
    • const和引用(&)可省略但建议保留
4. 应用案例
1)例题:先升序后降序输出数组元素
  • 解题思路:
    • 直接使用默认sort升序排列后输出
    • 降序输出方案:
      • 方案一:反向遍历输出
      • 方案二:使用自定义比较函数再次排序
  • 实现细节:
    • 数组大小定义:const int N = 5e5+3
    • 输入输出优化:ios::sync_with_stdio(0)
    • 输出格式控制:使用条件表达式处理末尾空格
  • 性能对比:
    • 反向输出方案运行时间更优(5ms)
    • 二次排序方案内存消耗相同但耗时略长
  • 易错点:
    • 区间范围容易混淆(注意左闭右开)
    • 自定义比较函数返回值类型错误
    • 输出格式控制不当导致格式错误
posted @ 2026-04-08 13:15  Sherry_pro  阅读(73)  评论(0)    收藏  举报