基本思想:

图示: (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相关推荐

  1. 排序算法笔记:堆排序 HeapSort in java

    2019独角兽企业重金招聘Python工程师标准>>> /*** 堆排序* 简述:* 首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得堆的长度 ...

  2. java heapsort_排序算法笔记:堆排序 HeapSort in java

    /** * 堆排序 * 简述: * 首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得堆的长度减小1 ,调用保持最大堆性质的算法调整,使得堆顶元素成为最大值,此时 ...

  3. 堆排序-HeapSort

    1. 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树. 二叉 ...

  4. 建堆 java_堆排序就这么简单

    一.堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完 ...

  5. 上标3下标6算法_图解堆排序算法

    堆排序定义 一般来说,算法就像数学公式,前人经过不断优化和验证得到有规律性的公式留给后人使用,当然也会交给后人验证的思路.那么堆排序算法就是这样,它有基本固定的定义如下: 1.将数组构建为一颗有规则的 ...

  6. python3堆排序_python 堆排序

    堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点(但是不保证所有左 ...

  7. 算法导论学习笔记 第6章 堆排序

    在本章中介绍了另一种排序算法:堆排序(heapsort).与归排序一样,但不同于插入排序的是,堆排序的时间复杂度式(Onlgn).而与插入排序相同,但不同于归并排序的是,堆排序同样具有空间原址性(我理 ...

  8. 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七

    十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...

  9. 二叉排序树与文件操作的设计与实现_堆排序就这么简单

    一.堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完 ...

最新文章

  1. 阿里飞天大数据飞天AI平台“双生”系统正式发布,9大全新数据产品集中亮相
  2. HDU 1695 BZOJ 2301 莫比乌斯反演
  3. 答辩攻略之二:纯方案赛
  4. Lumen开发:如何向 IoC 容器中添加自己定义的类
  5. Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
  6. djagno-oscar的页面出现Error 10605 - Receiving country does not support the transaction currency.
  7. C语言关键字----Const
  8. bootstrap文件不能被识别_如何使用npm安装bootstrap
  9. python 线性回归 统计检验 p值_PAST:最简便易用的统计学分析软件教程(一)软件基本信息介绍...
  10. Java常见的8种数据结构
  11. 关于电子计算机的热点,电脑如何变热点?8款电脑wifi热点软件推荐
  12. 轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
  13. Windows远程提示“终端服务器超出了最大允许连接”
  14. 从零开始编写minecraft光影包(7)基础水面绘制
  15. Python AQI空气污染指数数据分析与机器学习
  16. layui数据表格导入Excel,后端打印乱码
  17. el-form和el-col响应式布局
  18. word中插入图表改变数据系列产生在行或列
  19. 第十周项目二 M$pszi$y是什么意思?
  20. 做毕设电脑配置不够用?除了换电脑还有其他办法吗?

热门文章

  1. Debian 6.0 安装过程 及中文乱码
  2. 博客 rss 如何使用_如何使用RSS从您的GatsbyJS博客自动交叉发布
  3. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始
  4. 三菱fx2n64mr说明书_三菱FX2N可编程控制器使用手册
  5. 1049 Counting Ones
  6. 放大 旋转 css3,CSS3详解:transform 的旋转、旋转放大、放大、移动
  7. 现在参加软件测试培训就业难度大不大?
  8. JS栈结构的简单封装
  9. java gettickcount_linux上的GetTickCount函数
  10. poj 1681 Painter#39;s Problem(高斯消元)