首页 > 编程语言 >笔记/C++中的数组排序

笔记/C++中的数组排序

时间:2024-04-24 22:01:35浏览次数:25  
标签:std sort int 笔记 vector C++ 排序 numbers

在C++中,std::sort函数是一个用于对容器(如数组、向量等)进行排序的通用算法。它定义在<algorithm>头文件中,并接受两个迭代器参数,分别指向要排序的范围的开始和结束位置。此外,std::sort还可以接受一个可选的比较函数或lambda表达式,用于自定义排序规则。

以下是std::sort函数的基本用法和一些示例:

基本用法

```cpp
#include <algorithm> // 包含 std::sort
#include <vector>    // 包含 std::vector
#include <iostream>  // 包含 std::cout, std::endl

int main() {
    std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};

    // 使用 std::sort 对 vector 进行排序
    std::sort(numbers.begin(), numbers.end());

    // 打印排序后的 vector
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

自定义比较函数

如果你需要按照特定的规则进行排序,可以提供一个比较函数给std::sort。比较函数应该接受两个参数并返回一个布尔值,指示第一个参数是否应该在排序后出现在第二个参数之前。

bool compare(int a, int b) {
    // 假设我们想要按照降序排序
    return a > b;
}

int main() {
    std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};

    // 使用自定义比较函数对 vector 进行降序排序
    std::sort(numbers.begin(), numbers.end(), compare);

    // 打印排序后的 vector
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

使用 Lambda 表达式

从C++11开始,你还可以使用lambda表达式作为比较函数,这使得代码更加简洁。

int main() {
    std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};

    // 使用 lambda 表达式对 vector 进行降序排序
    std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; });

    // 打印排序后的 vector
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

对数组排序

如果你有一个原始数组而不是容器,你也可以使用std::sort,但你需要传递指向数组第一个元素的指针和指向数组尾部之后一个位置的指针。

#include <algorithm>
#include <iostream>

int main() {
    int numbers[] = {4, 2, 9, 6, 5, 1, 8, 3, 7};
    int size = sizeof(numbers) / sizeof(numbers[0]);

    // 使用 std::sort 对数组进行排序
    std::sort(numbers, numbers + size);   // 按从小到大的顺序进行排序

    // 打印排序后的数组
    for (int i = 0; i < size; ++i) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在这些示例中,std::sort默认执行升序排序。如果你想进行降序排序,可以通过比较函数或lambda表达式来实现。比较函数或lambda表达式应该返回一个布尔值,指示第一个参数是否应该在排序后出现在第二个参数之前。

标签:std,sort,int,笔记,vector,C++,排序,numbers
From: https://www.cnblogs.com/xinYuanD/p/18156462

相关文章

  • SQL学习笔记
    --creattable--auto-generateddefinitioncreatetableemp(idintnullcomment'编号',worknovarchar(10)nullcomment'工号',namevarchar(10)nullcomment'名字',genderchar(1)......
  • 论文笔记-Two-phase flow regime identification based on the liquid-phase velocity
    对象:液相速度信息方法:CNN、LSTM、SVM目标:实现了水平管道内两相流态识别关注特征:从速度时间序列数据中提取的统计特征:均值、均方根和功率谱密度、最大速度比和最大速度差比结果:SVM-93.1%,CNN-94%,LSTM-不佳73.3%LSTM:总共使用了300秒的速度数据,然后将其分为180秒用于训练和......
  • PM 的基本技术训练 – 案例分析 在PM 带领下, 每个团队深入分析下面行业的软件, 找到行
    英语学习/词典App英语学习/词典App评级牛津高阶英汉双解词典app优点:权威的词汇分类,适合专业英语词汇学习,查词功能强大,支持通配符搜索。缺点:可能需要在特定区域的Appstore购买,价格较高。网易有道词典优点:用户评分高,专为iPad设计,提供多种语言翻译,适合学生使用。缺点:可......
  • 风险控制 1、如果你的项目发布后失败,主要的原因会是什么? 2、每个团队列出自己项目中
    项目发布失败的主要原因会是:-需求管理不当:项目未能准确捕捉或满足用户需求。资源分配不当:团队可能缺乏必要的技能或资源来完成项目。时间管理问题:项目可能未能在预定时间内完成。沟通不畅:团队成员之间、团队与利益相关者之间的沟通可能存在问题。技术问题:项目可能遇到无法......
  • 排序5-快速排序
    排序5-快速排序快速排序(正序)利用分而治之的思想+挖坑填数排序,选择一个基准数,将小于基准数的元素全部放在基准数左边,大于基准数的元素全部放在基准数右侧.再对剩下的部分进行快速排序快速排序c++实现(正序)//快速排序(正序)voidquickSort(i......
  • 双向循环链表:(创建、插入、遍历、求长、查找、删除、排序、销毁)待测
    目录一、双向循环链表存在的意义二、节点的定义三:实现1:创建链表(即创建一个空链表)2:创建新结点3:遍历4:插入头插入尾插入中间插入一、双向循环链表存在的意义数组这样的结构提供了连续内存的访问和使用,链表是对内存零碎空间的有效组织和使用,双向循环链表增大了访问的自由度。二、......
  • 2024.4.22(周一)构建之法阅读笔记3
    第六章敏捷流程敏捷开发的原则是:1.尽早并持续地交付有价值的软件以满足顾客需求  2.敏捷流程欢迎需求的变化  3.经常发布可用的软件,发布间隔可以从几周到几个月,能短则短 4.业务人员和开发人员在项目开发过程中应该每天共同工作 5.以有进取心的人为项目核心,充分支持信......
  • 团队练习2:风险控制 1、如果你的项目发布后失败,主要的原因会是什么? 2、每个团队列出自
    学生信息管理系统项目发布后失败的主要原因可能包括:需求分析不准确或不完整,导致系统功能与用户需求不符。技术实现存在问题,如性能低下、安全性不足等。项目管理不善,如进度延误、资源分配不合理等。用户界面设计不佳,导致用户体验差。市场推广不足,用户接受度低。项目中目前面......
  • 2024.4.18(周四)构建之法阅读笔记1
    第一章概论软件=程序+软件工程  软件企业=软件+商业模式  一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数等等,这些都是软件构建的过程。软件开发的不同阶段:1.玩具阶段 2.业余爱好阶段 3.探索......
  • 2024.4.19(周五)构建之法阅读笔记2
    第四章两人合作在代码规范方面,可以分为两个部分:代码风格规范和代码设计规范。代码风格规范主要是缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释等;建民老师上课主要强调的是缩进、命名和注释。在代码设计规范方面,主要是函数、goto错误处理、类处理等。......