C++中的排序函数详解

c++中的排序函数详解

C++ 中的排序函数是用于对数组或容器中的元素进行排序的功能函数。排序可以按升序或降序排列,可以对整型、浮点型、字符型等各种类型的数据进行排序。C++ 语言提供了多个排序函数,本文将对这些排序函数的使用方法和特点进行详细介绍。

sort()函数

sort() 函数是 C++ STL 中最常用的排序函数之一,其功能是对数组或容器中的元素进行排列。sort() 函数的基本用法如下:

sort(begin, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址 + 1,因此 end 指向最后一个元素后面的空地址。sort() 函数默认按升序排序,如果需要按降序排序,则可以传入一个函数指针或 lambda 表达式作为第三个参数。

下面是一个示例代码,演示了如何使用 sort() 函数对整型数组进行排序:

立即学习“C++免费学习笔记(深入)”;

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    sort(arr, arr + n);    for (int i = 0; i < n; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

1 2 3 4 5 6 7 8 9

stable_sort() 函数

stable_sort() 函数与 sort() 函数相似,但它保证在排序后,相同值的元素的相对位置不变。stable_sort() 函数的使用方法与 sort() 函数类似,也可以传入一个函数指针或 lambda 表达式作为第三个参数。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    stable_sort(arr, arr + n);    for (int i = 0; i < n; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

1 2 3 4 5 6 7 8 9

partial_sort() 函数

partial_sort() 函数可以将数组或容器中的元素部分排序,即将前 k 小的元素排在数组前面(或将前 k 大的元素排在数组前面)。使用方法如下:

partial_sort(begin, middle, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址 + 1,而 middle 是一个指向第 k 个元素的迭代器。需要注意的是,partial_sort() 函数只保证前 k 个元素是有序的,其余元素的顺序是不确定的。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    int k = 3;    partial_sort(arr, arr + k, arr + n);    for (int i = 0; i < k; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

1 2 3

nth_element() 函数

nth_element() 函数用于选取数组或容器中的第 k 小(或第 k 大)元素,并将其排在数组的第 k 个位置。使用方法如下:

nth_element(begin, middle, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址 + 1,而 middle 是一个指向第 k 个元素的迭代器。需要注意的是,nth_element() 函数只保证数组的前 k 个元素是有序的,而第 k 个元素则是未排序的。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    int k = 3;    nth_element(arr, arr + k - 1, arr + n);    cout << "第 " << k << " 小的数是:" << arr[k - 1] << endl;    return 0;}

运行上述代码结果如下:

第 3 小的数是:3

make_heap() 函数

make_heap() 函数可以将数组或容器转化为堆,即将数组中的元素按照二叉堆的规则进行排序,以支持堆操作。使用方法如下:

make_heap(begin, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址 + 1。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    make_heap(arr, arr + n);    for (int i = 0; i < n; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

9 7 8 6 4 3 5 1 2

push_heap() 函数

push_heap() 函数可以将一个新元素插入到堆中,并重新调整堆的结构,以满足堆的性质。使用方法如下:

push_heap(begin, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址。需要注意的是,被插入的新元素应当放在堆的最后一个位置。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    make_heap(arr, arr + n);    arr[n] = 0;    push_heap(arr, arr + n + 1);    for (int i = 0; i < n + 1; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

9 7 8 6 4 3 5 1 2 0

pop_heap() 函数

pop_heap() 函数用于将堆顶元素弹出,并重新调整堆的结构,以满足堆的性质。使用方法如下:

pop_heap(begin, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址。需要注意的是,弹出堆顶元素后,堆的大小应当减 1。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    make_heap(arr, arr + n);    pop_heap(arr, arr + n);    n--;    for (int i = 0; i < n; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

8 7 5 6 4 3 2 1

sort_heap() 函数

sort_heap() 函数用于将堆排序,并且保证排序后的数组是升序的。使用方法如下:

sort_heap(begin, end);

其中,begin 是数组或容器中第一个元素的地址,end 是最后一个元素的地址。需要注意的是,sort_heap() 函数在对堆排序之前会先调用 pop_heap() 函数,弹出堆顶元素,因此排序后的数组大小应当减 1。下面是一个示例代码:

#include #include using namespace std;int main(){    int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7};    int n = sizeof(arr) / sizeof(arr[0]);    make_heap(arr, arr + n);    sort_heap(arr, arr + n);    for (int i = 0; i < n; i++)    {        cout << arr[i] << " ";    }    return 0;}

运行上述代码结果如下:

1 2 3 4 5 6 7 8 9

总结

本文详细介绍了 C++ 中常见的排序函数,包括 sort()、stable_sort()、partial_sort()、nth_element()、make_heap()、push_heap()、pop_heap() 和 sort_heap() 函数。这些排序函数各有特点,可以满足不同的排序需求。在实际编程中,根据具体情况选择适当的排序函数非常重要。

以上就是C++中的排序函数详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1446046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 23:04:56
下一篇 2025年12月17日 23:05:09

相关推荐

  • 构建模拟:从头开始的实时交易模拟器

    简介 嘿,开发社区!我很高兴分享我的业余项目 Simul8or – 一个实时日间交易模拟器,旨在为用户提供一个无风险的环境来练习交易策略。该项目 100% 构建在 ASP.NET WebForms、C#、JavaScript、CSS 和 SQL Server 技术堆栈上,没有外部库或框架。从头开始构…

    2025年12月24日
    300
  • 花 $o 学习这些编程语言或免费

    → Python → JavaScript → Java → C# → 红宝石 → 斯威夫特 → 科特林 → C++ → PHP → 出发 → R → 打字稿 []https://x.com/e_opore/status/1811567830594388315?t=_j4nncuiy2wfbm7ic…

    2025年12月24日
    000
  • 深入理解CSS属性选择器并举例说明

    CSS属性选择器详解及应用示例 在CSS中,我们经常需要通过选择器来选取并修改特定的元素样式。除了常见的标签选择器(如div、p等),CSS还提供了属性选择器,可以根据元素的属性值来选择并修改样式。 本文将详细介绍CSS的属性选择器,并给出一些实际应用的示例。 一、属性选择器类型 立即学习“前端免费…

    2025年12月24日
    000
  • css和c的区别是什么

    区别是:1、C语言是一门面向过程、抽象化的通用程序设计语言、计算机编程语言,广泛应用于底层开发;2、CSS是一种用来表现HTML或XML等文件样式的计算机语言,可以做到网页和内容进行分离的一种样式语言。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电…

    2025年12月24日
    000
  • 动态加载css详解

    这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法引用来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公司项目需要用到懒加载来提高网站加载速度,所以将非首屏渲染必需的c…

    好文分享 2025年12月24日
    000
  • css中px、em和rem使用详解

    相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 em 和 rem 都是灵活可扩展的单…

    好文分享 2025年12月24日
    000
  • CSS双飞翼布局的详解

    这次给大家带来CSS双飞翼布局的详解,实现CSS双飞翼布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局,就是两端固定宽高,中间自适应的三栏布局 先来张图,左边和右边的灰色块是固定宽高的,中间绿色的区域是宽高自适应 方式一:通过flex弹性布局来实现 看代码 //HTML结构,p2是…

    2025年12月24日
    000
  • CSS的三栏布局详解

    这次给大家带来CSS的三栏布局详解,CSS的三栏布局的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了CSS经典三栏布局方案,分享给大家,也给自己做个笔记,具体如下: 三栏布局,顾名思义就是两边固定,中间自适应。三栏布局在开发十分常见 1. float布局 最简单的三栏布局就是利用flo…

    2025年12月24日 好文分享
    000
  • CSS的定位属性详解

    这次给大家带来CSS的定位属性详解,使用CSS定位属性的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS的定位属性有三种,分别是绝对定位、相对定位、固定定位。 position: absolute; position: relative; position: fixed; 下面逐一介绍。 相…

    2025年12月24日 好文分享
    000
  • px单位html5响应式方案详解

    移动端h5响应式方案最近这几年用得最多的最多的就是rem方案了。这个需要计算根元素的font-size来实现响应式。本文主要和大家介绍了px单位html5响应式方案的相关资料,希望能帮助到大家。 但这种方案也有一个缺点,那就是font-size不为整数的时候一些字体使用rem单位会导致字体显示的大小…

    好文分享 2025年12月24日
    000
  • Css多行字符截取方法详解

    相信有很多同学在写前端页面的时候,都会遇到字符长了需要截取的问题,最简单的方法就是手动去截取,可这样又感觉太low了,今天晚上就来讲讲利用css进行字符的截取,不了解css是如何截取的同学可以和我们一起看看哦! 前言 最近在做响应式系统设计的时候遇到需要对标题进行多行文字截取的效果,如下图: 看似十…

    2025年12月24日 好文分享
    000
  • CSS内边距外边距代码详解

    本文主要和大家分享css之内边距与外边距,本文运用了多个实例与代码,希望能帮助到大家。 外边距: margin 左边距 margin-left:数值 | autoauto:即距离这个边最远的距离右边距: margin-right:数值 | auto上边距: margin-top:数值 这里不能用au…

    2025年12月24日 好文分享
    000
  • CSS常用的一些属性详解

    text-align: center”>CSS常用属性 ☛关于css属性个人建议查看手册更加详细方便,我这里就几种常用属性进行分类并简单取几个常用属性值,仅供跟我一样刚学习前端的人作为入门而用。  1.字体样式 字体的缩写,写法是font:font-style|| font-var…

    好文分享 2025年12月23日
    000
  • CSS如何实现两端对齐详解

    前面的话   两端对齐在导航nav的制作中非常常用。本文将详细介绍css两端对齐的3种实现方式 flex   弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端对齐。可以使用主轴对齐justify-content的两端对齐属性space-between just…

    好文分享 2025年12月23日
    000
  • css样式之border-radius详解

    border-radius 属性设置边框的园角     可能的值:像素,百分比 扩展延伸 html代码 css代码 p { height: 200px; width: 200px; border: 2px solid #a72525; border-radius: 10px;} 结果 立即学习“前端…

    好文分享 2025年12月23日
    000
  • 详解CSS属性值用法

    万维网联盟(w3c) 使用了一套特别的语法来定义 css 的属性值,能让所有的 css 属性都用。如果你曾看过 css 规范,你可能已经见过这套语法了。就像  border-image-slice  的语法 ,让我们看看: = [ | ]{1,4} && fill?如果你不知道这些符…

    2025年12月23日 好文分享
    000
  • 详解css中border-image的使用方法

    border-image-source 属性设置边框的图片的路径[none | ] p { border: 20px solid #000; border-image-source: url(border.png);} border-image-slice 属性图片边框向内偏移[ | ](1,4) …

    2025年12月23日
    000
  • HTML5怎么制作广告_HTML5用动画与交互制横幅或弹窗广告吸引点击【制作】

    可利用HTML5结合CSS3动画、Canvas、Web Animations API、Intersection Observer和video标签制作互动广告:一用@keyframes实现横幅入场动画;二用Canvas绘制并响应悬停;三用Web Animations API控制弹窗时序;四用Inter…

    2025年12月23日
    000
  • html5怎么找颜色_html5用取色器或CSS命名如red快速找对应颜色【查找】

    可通过浏览器开发者工具取色、CSS命名颜色对照表、在线十六进制颜色查找工具及CSS自定义属性验证四种方法快速定位颜色值对应的实际色彩效果。 如果您在HTML5开发中需要快速定位某个颜色值对应的实际色彩效果,可以通过取色器工具或CSS预定义颜色名称来识别。以下是查找颜色的具体操作方法: 一、使用浏览器…

    2025年12月23日
    000
  • HTML如何打出书名号《》_特殊符号编码方法【教程】

    正确显示中文书名号《》和下划线“_”需确保UTF-8编码声明、使用Unicode直输或HTML实体(如{、})、CSS控制下划线样式、或JavaScript动态注入。 如果您在编写HTML网页时需要正确显示中文书名号《》或下划线“_”,但发现直接输入后出现乱码、错位或被浏览器忽略,则可能是由于字符编…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信