堆排序思想和案例图解
堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了
步骤一 构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。
a.假设给定无序序列结构如下
2.此时我们从最后一个非叶子结点开始(叶结点自然不用调整,第一个非叶子结点 arr.length/2-1=5/2-1=1,也就是下面的6结点),从左至右,从下至上进行调整。
4.找到第二个非叶节点4,由于[4,9,8]中9元素最大,4和9交换。
这时,交换导致了子根[4,5,6]结构混乱,继续调整,[4,5,6]中6最大,交换4和6。
此时,我们就将一个无需序列构造成了一个大顶堆。
步骤二 将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素。如此反复进行交换、重建、交换。
a.将堆顶元素9和末尾元素4进行交换
b.重新调整结构,使其继续满足堆定义
c.再将堆顶元素8与末尾元素5进行交换,得到第二大元素8.
后续过程,继续进行调整,交换,如此反复进行,最终使得整个序列有序
再简单总结下堆排序的基本思路:
a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;
b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;
c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。
堆排序思想和案例图解相关推荐
- Blend4精选案例图解教程(三):一键拖拽
原文:Blend4精选案例图解教程(三):一键拖拽 拖拽效果,常规实现方法是定义MoveLeftDwon.MoveLeftUp.MouseMove事件,在Blend的世界里,实现对象的拖拽,可以不写一 ...
- 案例+图解带你一文读懂SVG
资料链接 案例+图解带你一文读懂SVG (2.6W+字) 简介 SVG 是 Scalable Vector Graphics 的缩写,意为可缩放矢量图形.于 2003年1月14日 SVG 1.1 被S ...
- 贪吃蛇游戏的编程思想(案例总结)
贪吃蛇游戏的编程思想(案例总结) 效果图: 案例要求: 1.蛇在设定好的面板上移动 2.食物在蛇的面板是随机位置 3.当在键盘上按下上.下.左.右键的时候蛇改变移动方向 4.当蛇吃到食 ...
- Web API-排他思想及其案例
通过循环将其他元素调整为B状态,通过this或者下标将当前元素调整为A状态 案例-按钮切换(只允许一个按钮有背景颜色) <style>.pink {background: orangere ...
- 排序算法 | 堆排序,算法的图解、实现、复杂度和稳定性分析
今天讲解一下堆排序的原理以及实现.复杂度和稳定性分析 目录 1 堆的定义 2 堆排序的思路 3 代码实现 4 堆的输出(删除操作) 5 堆的插入操作 6 堆排序的特点 7 性能分析 1 堆的定义 堆排 ...
- 内部管理类软件基础架构思想(思路图解 + 配套免费视频)
两三年前就想把这个读取配置文件的,进行一次彻底得改造,一直没精力或者能力还不到位,说实话整体编写代码的能力不够的原因应该是占主要成分,由于这两三年,一直想把这个做好,所以想了很久了,思路成熟时,就一口 ...
- pcb只开窗不镀锡_案例图解射频PCB设计要点
在电子产品和设备中,电路板是一个不可缺少的部件,它起着电路系统的电气和机械等的连接作用.如何将电路中的元器件按照一定的要求,在PCB上排列组合起来,是PCB设计师的主要任务之一.布局设计不是简单的将元 ...
- Blend4精选案例图解教程(二):找张图片玩特效
Blend中的特效给了我们在处理资源时更多的想象空间,合理地运用特效往往会得到梦幻般效果,本次教程展示对图片应用特效的常规操作,当然特效不仅限于使用在图片上,还也可以应用到动画和视频中. OK,开始本 ...
- 案例+图解带你一文读懂Canvas【2W字,建议收藏】
前言 在早期web端的动画.广告.游戏等基本上都是使用Flash来实现的,要在网页上播放Flash需要一堆代码和插件,因此Flash的使用上比较复杂,还会给开发者带来一堆麻烦. 自从HTML5提供 C ...
最新文章
- 看论文不用来回翻了,这款PDF阅读神器能自动提取前文信息,科研效率max!
- Stanford机器学习笔记-4. 神经网络Neural Networks (part one)
- 高职学生如何成为编程高手
- 《剑指offer》把字符串转为整数
- springmvc入门学习
- (z)如何在SignalTAP II中保留特定节点
- 现代软件工程 第十一章 【软件设计与实现】 练习与讨论
- 【Flink】Flink反压(背压)网络流控
- 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
- Node.js下载及安装步骤
- 详解:Drools规则引擎探究以及在IOT的应用
- 智能智慧型停车场管理系统解决方案
- 在被线上大量日志输出导致性能瓶颈毒打了很多次之后总结出的经验
- 基于51单片机数码管显示
- vue-element-admin整合spring-boot实现权限控制之用户管理篇
- 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
- hive报错:Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
- GB2312和BIG5,Unicode/UTF8等编码之间的互相转化
- [项目管理]敏捷宣言
- 虚拟机licserver服务器,Grid license服务器搭建
热门文章
- 由阮一峰的博客想到的
- 【竞赛篇-新苗结题】新苗拿什么结题?新苗结题成果形式与结题验收书撰写
- graphpadY轴设置刻度不均匀_flotherm学习心得(参数设置)
- OpenLayers3+OpenStreetMap初探
- 【知识图谱论文】使用强化学习对时间知识图中的路径进行多跳推理
- csharp高级练习题:凡我字谜在哪里?【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
- 那一年的北风--序言1
- 【汇智学堂】-JS菜鸟版过河小游戏(之九---修改bug)
- android:exported使用
- 【绿色qq炫舞记忆助手心动版】增加社区钓鱼等功能