八大排序算法----堆排序
堆排序的基本步骤:(以从大到小的顺序排序为例)
1.构建大顶堆(每个结点的值都大于或等于其左右孩子结点的值)
2.排序:每次堆顶的元素取出来(整个堆中值最大),与最后一个节点做交换,使末尾元素最大
3.交换完之后,需要重新维护堆中剩下的其他节点,保证每次的堆顶都是最大值,重复2,3,直到序列完全有序
Code:
//维护堆的性质
//大顶堆:父节点的左右孩子都比父节点小
//小顶堆:父节点的左右孩子都比父节点大
void heapify(vector<int>& nums, int n, int i)
{int large = i;//保存父节点int left = 2 * i + 1;//左孩子int right = 2 * i + 2;//右孩子//判断左孩子是否比父节点大? 大的话,就更新父节点的下标if (left<n && nums[left]>nums[large])large = left;//判断右孩子是否比父节点大? 大的话,就更新父节点的下标if (right<n && nums[right]>nums[large])large = right;//到此,已经找到了当前父节点和其左右孩子中最大的节点的下标//判断父节点的下标是否发生变化,如果不相等,说明左右孩子中有比父节点大的if (large != i){//交换节点,维护大顶堆swap(nums[large], nums[i]);//继续维护剩下的节点heapify(nums, n, large);}
}
void heapsort(vector<int>& nums, int n)
{//建堆:从最后一个有孩子的父节点开始建立//这里为什么是i = n / 2 - 1? 因为左孩子的下标可以表示为2*i+1,此时最后一个孩子的下标为n-1//推导过来,找到最后一个有孩子的父节点的下标为n / 2 - 1for (int i = n / 2 - 1; i >= 0; i--){heapify(nums, n, i);}//排序:将大顶堆的顶与最后一个叶子节点进行交换,也就是每次找到当前堆中最大的元素,放在数组的最后面for (int i = n - 1; i > 0; i--){//交换swap(nums[i], nums[0]);//继续维护大顶堆中剩下节点,要始终保持是大顶堆的顺序heapify(nums, i, 0);}
}
int main()
{int n;cin >> n;vector<int> nums(n);for (int i = 0; i < n; i++){cin >> nums[i];}heapsort(nums, n);cout << "按升序顺序排序" << endl;for (auto& i : nums){cout << i << " ";}return 0;
}
这里如果要按照从小到大的顺序进行堆排序的话,只需要将维护堆的函数中if判断条件做一点小改动即可。
void heapify(vector<int>& nums, int n, int i)
{int small = i;//保存父节点int left = 2 * i + 1;//左孩子int right = 2 * i + 2;//右孩子if (left<n && nums[left]<nums[small])small = left;if (right<n && nums[right]>nums[small])small = right;//判断父节点的下标是否发生变化,if (small != i){//交换节点,维护大顶堆swap(nums[small], nums[i]);//继续维护剩下的节点heapify(nums, n, small);}
}
堆排序是不稳定的排序算法。
堆排序的时间复杂度:O(nlogn)
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
八大排序算法----堆排序
堆排序的基本步骤:(以从大到小的顺序排序为例) 1.构建大顶堆(每个结点的值都大于或等于其左右孩子结点的值) 2.排序:每次堆顶的元素取出来(整个堆中值最大),与最后一个…...
![](https://img-blog.csdnimg.cn/a0ea18bcf37643b6b1f8d1f4ed32def9.png)
Docker Desktop 设置镜像环境变量
点击run 展开Optional settings container name :容器名称 Ports:根据你需要的端口进行输入,不输入则默认 后面这个 比如我这个 5432 Volumes:卷,也就是做持久化 需要docker 数据保存的地方 Environment variables…...
![](https://img-blog.csdnimg.cn/01dce98cc9654a22b69d1f3512546162.png)
springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)
配置的概念: Spring Boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。 注意配置文件的命名必须是applicat…...
![](https://img-blog.csdnimg.cn/4208314195954c949e262ac0c302d10a.jpeg#pic_center)
涛然自得周刊(第 5 期):蝲蛄吟唱的地方
作者:何一涛 日期:2023 年 8 月 20 日 涛然自得周刊主要精选作者阅读过的书影音内容,不定期发。历史周刊内容可以看这里。 电影 《沼泽深处的女孩》 改编自小说《蝲蛄吟唱的地方》,主角是一位在沼泽地独自生活并长大的女孩&…...
![](https://img-blog.csdnimg.cn/62fe41845e954e62a9510d76eaa76433.gif#pic_center)
Android Ble蓝牙App(七)扫描过滤
Ble蓝牙App(七)扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示,本篇文章中将增…...
![](https://www.ngui.cc/images/no-images.jpg)
小程序当前页面栈以及跳转
1.调用页面栈刷新接口 let pages getCurrentPages(); //当前页面栈 if (pages.length > 1) { let beforePage pages[pages.length - 2]; //获取上一个页面实例对象 beforePage.$vm.getActivityLi…...
![](https://www.ngui.cc/images/no-images.jpg)
jQuery获取表单的值val()
(1)页面中有很多元素,包括表单中的输入项,如输入文本框等;获取、设置、输入文本框的值;val()方法。 (2)也包括<p>、<span>等元素;获取、设置这些元素的文本…...
![](https://img-blog.csdnimg.cn/c3068d9cff664423a0242e659177b882.png)
【专栏必读】数字图像处理(MATLAB+Python)专栏目录导航及学习说明
文章目录 第一章:绪论第二章:数字图像处理基础第三章:图像基本运算第四章:图像的正交变换第五章:图像增强第六章:图像平滑第七章:图像锐化第八章:图像复原第九章:图像形态…...
![](https://img-blog.csdnimg.cn/img_convert/9abccf7eb398c94a5fde5809de62fcc0.png)
2023年非证券类投资银行业发展报告
第一章 行业概况 非证券投资银行业是一个专门为公司、政府和高净值个人提供金融服务的行业,与传统的证券投资银行不同,其主要业务不涉及证券交易,而是注重为客户提供咨询服务、融资和投资管理等服务。 非证券投资银行通常涉及的业务领域包括…...
![](https://img-blog.csdnimg.cn/cd1fb304ce4b4e1ca680ff96c87165c5.png)
Matlab 如何把频谱图的纵坐标设置为分贝刻度
Matlab 如何把频谱图的纵坐标设置为分贝刻度 Matlab代码如下: % 如何把频谱图的纵坐标设置为分贝刻度 % % pr2_2_6 clc; clear; close all;load pr2_2_6_sndata1.mat % 读入数据 X fft(y); % FFT n2 1:L/21; % 计算正频率…...
![](https://www.ngui.cc/images/no-images.jpg)
VUE写后台管理(2)
VUE写后台管理(2) 1.环境2.Element界面3.Vue-Router路由后台1.左导航栏2.上面导航条 1.环境 1.下载管理node版本的工具nvm(Node Version Manager) 2.安装node(vue工程的环境管理工具):nvm install 16.13.0 3.安装vue工…...
![](https://www.ngui.cc/images/no-images.jpg)
RHCSA8.2
Node1 配置您的系统以使用默认存储库 配置您 的系统以使用默认存储库YUM 存储库已可以从 http://foundation0.ilt.example.com/dvd/BaseOS 和 http://foundation0.ilt.example.com/dvd/AppStream 使用配置您的系统,以将这些位置用作默认存储库[rootclear ~]# cat …...
![](https://img-blog.csdnimg.cn/29180d0df3ec4650aca73c5acd093f30.png)
修改linux中tomcat的端口
随便修改一个 以8055为例子 开放8081端口 firewall-cmd --permanent --add-port8081/tcp firewall-cmd --reload firewall-cmd --list-all...
![](https://img-blog.csdnimg.cn/img_convert/8d8954fa1c56504b000a27442374dd0c.png)
学妹学Java(一)
⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 Hello,亲爱的各位友友们,好久不见࿰…...
![](https://img-blog.csdnimg.cn/img_convert/b2b5e9a502266868a65b8c93d4066ec8.jpeg)
湖南省副省长秦国文一行调研考察亚信科技
9月5日,湖南省人民政府党组成员、副省长秦国文一行到亚信科技调研考察,亚信科技高级副总裁陈武主持接待。 图:双方合影 在亚信科技创新展示中心,秦国文了解了亚信科技在5G、算力网络、人工智能、大数据等前沿领域的创新探索&…...
![](https://img-blog.csdnimg.cn/img_convert/6a1d04d9d60e461c23ce32abd96acfed.png)
k8s部署redis 3主3从
k8s部署redis6节点,组成3主3从集群模式 一般来说,redis部署有三种模式。 单实例模式,一般用于测试环境。 哨兵模式 集群模式后两者用于生产部署 哨兵模式 在redis3.0以前,要实现集群一般是借助哨兵sentinel工具来监控master节点…...
![](https://img-blog.csdnimg.cn/0ccd48884c8745398e01fdf157c89b3c.png)
Vue2安装vuex和vue-router报错处理
Vue2安装vuex和vue-router报错处理 Vue2.6安装VuexVue2.6安装vue-router Vue2.6安装Vuex 报错信息 处理方法 #查看vuex版本 npm view vuex versions --json #安装合适版本 npm install vuex3.6.2 --saveVue2.6安装vue-router 报错信息 处理方法 #查看vue-router版本 npm…...
![](https://img-blog.csdnimg.cn/img_convert/f01369856dd1a719e41d1f2137e8f3e4.jpeg)
算法leetcode|79. 单词搜索(rust重拳出击)
文章目录 79. 单词搜索:样例 1:样例 2:样例 3:提示:进阶: 分析:题解:rust:go:c:python:java: 79. 单词搜索: …...
![](https://img-blog.csdnimg.cn/64b5266d94e04aff8012997fc1f22d60.png)
2023年高教社杯全国大学生数学建模竞赛参赛事项注意
MathClub数模资源,含专属思路 资源链接:点击这里获取众多数模资料、思路精讲、论文模板latex和word、学习书籍等 2023高教社杯数学建模国赛–赛前准备 一年一度的数学建模国赛要来啦!!!小编仔细阅读了比赛官方网站上…...
![](https://img-blog.csdnimg.cn/cd0f514a57dc47da87c59c8a6bdd10dc.png)
数学建模--逻辑回归算法的Python实现
首先感谢CSDN上发布吴恩达的机器学习逻辑回归算法任务的各位大佬. 通过大佬的讲解和代码才勉强学会. 这篇文章也就是简单记录一下过程和代码. CSDN上写有关这类文章的大佬有很多,大家都可以多看一看学习学习. 机器学习方面主要还是过程和方法. 这篇文章只完成了线性可分方面的任…...
![](https://img-blog.csdnimg.cn/img_convert/7ea01ad8afc08765dc522afd35fd85ed.png)
Qt6_贪吃蛇Greedy Snake
贪吃蛇Greedy Snake 1分析 首先这是一个贪吃蛇界面,由一个长方形边框和一只贪吃蛇组成 默认开局时,贪吃蛇身体只有3个小方块,使用画笔画出 1.1如何移动 对于蛇的移动,有2种方法 在一定时间范围内(定时器),未对游戏…...
![](https://img-blog.csdnimg.cn/69b0e7226bd44574997318b12b6a22cf.jpeg)
Credo推出业界首款单片集成CMOS VCSEL驱动器的800G光DSP芯片
针对AOC及短距(SR)光模块优化的新型Credo DSP,适用于下一代超大规模数据中心/AI应用 加州圣何塞和中国深圳,2023年9月6日——Credo Technology(纳斯达克股票代码:CRDO)今日发布两款新品&#x…...
![](https://img-blog.csdnimg.cn/img_convert/48e8be073d27e6cac082e0e5842a139a.png)
【经验分享】如何使用VSCode对比两个文件
问题: 当有两个不同版本的文件,如何使用VSCode对比两个文件 解决办法 长按ctrl选择想要对比的两个文件-----右键选择将已选项进行比较----大功告成 大功告成...
![](https://www.ngui.cc/images/no-images.jpg)
从裸机开始安装ubuntu系统到安装NVIDIA驱动
这篇文章为总结类文章,更多的是把各个博主的内容总结一下,形成一套端到端的方法,主要内容包括: 安装ubuntu22.04版本(含启动U盘制作)配置ssh、固定ip和端口号安装NVIDIA驱动安装cuda11.7和cudnn8.6 文章目录 一、安装ubuntu22.041…...
![](https://img-blog.csdnimg.cn/909e0223bb2a4da494d467aa0f8be3ca.gif)
索尼 toio™ 应用创意开发征文|小巧机器,大无限,探索奇妙世界
文章目录 前言微型机器人的未来:toio™小机器人简介toio™小机器人:创新功能一览toio™小机器人:多领域的变革者toio™小机器人贪吃蛇游戏代码实现写在最后 前言 当我们谈到现代科技的创新时,往往会联想到复杂的机器和高级的编程…...
![](https://img-blog.csdnimg.cn/img_convert/28020651ef8412c1cfdc415b0c25c584.png)
什么牌子的led台灯质量好?热门的Led护眼台灯推荐
led台灯有环保无污染、耗能低、长寿命等优点,适合用在阅读、书写、批阅等办公或学习的场所。而挑选LED台灯时,分散光挡板做的比较好的优先选择,能分散大量蓝光,对眼睛危害较小。下面,小编为大家推荐五款质量好的led护眼…...
![](https://img-blog.csdnimg.cn/15c01536f2784432a4e80a2e14cd71a8.jpeg)
预推免,保研------长安大学保内,附加分面试准备【记录帖】
🚀长安大学——人工智能系——程惠泽 🚌前六学期专业排名:7/82 🚌信息门户GPA:3.94 🚌平均成绩:89.83 🚌加权成绩:89.15 / ☁️本人比较菜,只能保研本校&…...
![](https://img-blog.csdnimg.cn/861fae51849140bdb0def8b8b197e022.png)
Linux开源防病毒引擎ClamAV
ClamAV官方地址:https://www.clamav.net 它支持Linux、BSD、windows、Mac OS X等系统。 在CentOS 8(Tencent OS 3.1)安装非常便利,可以使用yum。 yum install clamav 安装成功,就可以使用它进行病毒扫描检查了。 c…...
![](https://img-blog.csdnimg.cn/2f319df5c15549c0bf1747892af94fd1.png)
Java复习-25-单例设计模式
单例设计模式 目的(使用场景) 在实际开发下,会存在一种情况:某一种类在程序的整个生命周期中,只需要实例化一次就足够了。例如,系统数据类,由于操作系统只有一个,因此在程序初始化…...
![](https://img-blog.csdnimg.cn/a8f9c0a16e7a4126a4664ef7a99bbe49.jpeg)
博客系统自动化测试项目实战(测试系列9)
目录 前言: 1.博客前端页面测试用例图 2.测试用例的代码实现 2.1登录页面的测试 2.2博客列表页面的测试 2.3写博客测试 2.4博客详情页面的测试 2.5已发布博客的标题和时间的测试 2.6注销用户的测试 结束语: 前言: 之前小编给大家讲…...
![](/images/no-images.jpg)
刚做的网站适合做外链吗/苏州seo
是40, 在建立数据表的时候要注意一下, 用char类型就可以了转载于:https://www.cnblogs.com/souroot/archive/2012/10/20/2732456.html...
![](https://img-blog.csdnimg.cn/img_convert/6c8b69d41abf1b5852112cbad545cf0a.png)
网络营销的网站建设/怎么策划一个营销方案
原标题:小程序日活超4亿,近10万商家开通直播,私域红利已来 !9 月 9 日晚间消息,在 2020 腾讯全球数字生态大会微信专场上,微信团队透露,截止 2020 年8 月,小程序日活超过 4 亿&#…...
![](/images/no-images.jpg)
制作网络游戏/网站seo推广方案
Oracle Application配置移植工具在ARP中的应用Oracle Migration Tools Introduce卢景秀摘要:ARP的所级部分主要是在ORACLEERP的基础上构架完成的。在我们的日常维护中,经常碰到因为需求变更,系统发生改变的情况,通常的做法是在一个…...
![](https://img-blog.csdnimg.cn/img_convert/a6586d096116e003b70d89825ff1ce30.png)
网站用excel做数据库/软件测试培训
出处:基于coreslam的2d-slam建图无需ros 的说明全网总结 - 机器人车技术开发分享网slam 建图当前最流行的是基于ROS平台的gmapping ,cartographer等,ros平台相对庞大,roslaunch rosrun 指令操作复杂。对于研究者有大把时间的人可以放开了去学…...
![](http://static.open-open.com/lib/uploadImg/20160821/20160821094436_421.jpg)
有了域名如何建设网站/windows优化大师怎么用
2019独角兽企业重金招聘Python工程师标准>>> 一、性能问题分类 除了交互、视觉、内容方面的问题外,在用户使用过程中,给用户造成烦恼的问题都可以归结为是性能问题,比如上文中列出的这些都属于性能问题,按照影响的方面…...
![](/images/no-images.jpg)
wordpress 3.2/seo网站关键词排名提升
引子 Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer)&am…...