堆排序——HeapSort
基本思想:
图示: (88,85,83,73,72,60,57,48,42,6)
平均时间复杂度:
O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N * logN)。
Java代码实现:
public class HeapSortTest {public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = new int[] { 10, 3, 2, 5, 6, 1, -2, 3, 14, 12, 3, 8, 55, 44,-10 };print(arr);heapSort(arr);System.out.println("排序后的数组:");print(arr);}private static void print(int[] a) {for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "\t");}System.out.println();}private static void swap(int[] a, int i, int j) {a[i] = a[i] + a[j];a[j] = a[i] - a[j];a[i] = a[i] - a[j];}private static void heapSort(int[] a) {for (int i = a.length - 1; i >= 0; i--) {createMaxHeap(a, i);swap(a, 0, i);print(a);}}private static void createMaxHeap(int[] a, int lastIndex) {for (int i = (lastIndex - 1) / 2; i >= 0; i--) {int k = i;while ((2 * k + 1) <= lastIndex) {int biggerIndex = 2 * k + 1;if (biggerIndex < lastIndex) {if (a[biggerIndex] < a[biggerIndex + 1]) {biggerIndex++;}}if (a[k] < a[biggerIndex]) {swap(a, k, biggerIndex);k = biggerIndex;} else {break;}}}} }
转载于:https://www.cnblogs.com/diyishijian/p/7811459.html
堆排序——HeapSort相关推荐
- 排序算法笔记:堆排序 HeapSort in java
2019独角兽企业重金招聘Python工程师标准>>> /*** 堆排序* 简述:* 首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得堆的长度 ...
- java heapsort_排序算法笔记:堆排序 HeapSort in java
/** * 堆排序 * 简述: * 首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得堆的长度减小1 ,调用保持最大堆性质的算法调整,使得堆顶元素成为最大值,此时 ...
- 堆排序-HeapSort
1. 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树. 二叉 ...
- 建堆 java_堆排序就这么简单
一.堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完 ...
- 上标3下标6算法_图解堆排序算法
堆排序定义 一般来说,算法就像数学公式,前人经过不断优化和验证得到有规律性的公式留给后人使用,当然也会交给后人验证的思路.那么堆排序算法就是这样,它有基本固定的定义如下: 1.将数组构建为一颗有规则的 ...
- python3堆排序_python 堆排序
堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点(但是不保证所有左 ...
- 算法导论学习笔记 第6章 堆排序
在本章中介绍了另一种排序算法:堆排序(heapsort).与归排序一样,但不同于插入排序的是,堆排序的时间复杂度式(Onlgn).而与插入排序相同,但不同于归并排序的是,堆排序同样具有空间原址性(我理 ...
- 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七
十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...
- 二叉排序树与文件操作的设计与实现_堆排序就这么简单
一.堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完 ...
最新文章
- 阿里飞天大数据飞天AI平台“双生”系统正式发布,9大全新数据产品集中亮相
- HDU 1695 BZOJ 2301 莫比乌斯反演
- 答辩攻略之二:纯方案赛
- Lumen开发:如何向 IoC 容器中添加自己定义的类
- Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
- djagno-oscar的页面出现Error 10605 - Receiving country does not support the transaction currency.
- C语言关键字----Const
- bootstrap文件不能被识别_如何使用npm安装bootstrap
- python 线性回归 统计检验 p值_PAST:最简便易用的统计学分析软件教程(一)软件基本信息介绍...
- Java常见的8种数据结构
- 关于电子计算机的热点,电脑如何变热点?8款电脑wifi热点软件推荐
- 轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
- Windows远程提示“终端服务器超出了最大允许连接”
- 从零开始编写minecraft光影包(7)基础水面绘制
- Python AQI空气污染指数数据分析与机器学习
- layui数据表格导入Excel,后端打印乱码
- el-form和el-col响应式布局
- word中插入图表改变数据系列产生在行或列
- 第十周项目二 M$pszi$y是什么意思?
- 做毕设电脑配置不够用?除了换电脑还有其他办法吗?
热门文章
- Debian 6.0 安装过程 及中文乱码
- 博客 rss 如何使用_如何使用RSS从您的GatsbyJS博客自动交叉发布
- java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始
- 三菱fx2n64mr说明书_三菱FX2N可编程控制器使用手册
- 1049 Counting Ones
- 放大 旋转 css3,CSS3详解:transform 的旋转、旋转放大、放大、移动
- 现在参加软件测试培训就业难度大不大?
- JS栈结构的简单封装
- java gettickcount_linux上的GetTickCount函数
- poj 1681 Painter#39;s Problem(高斯消元)