heapsort 堆排序

1.基本描述

​ 堆排序 heap sort 指利用堆这种数据结构所设计的一种排序算法。

​ 要求完全二叉树

​ 这边我只写最大堆

​ 堆排序归分在选择排序

​ 稳定性 不稳定

​ 时间复杂度
$$
O(nlog_2n)
$$
​ 空间复杂度
$$
O(1)
$$

2. 最大堆进行升序排序思想:

  1. 初始化堆 ,将数列 [0,n-1] 构造成最大堆

  2. 交换数据, 将array[0]和array[n-1]交换, 然后将 array[0…n-2] 重新调整为最大堆,以此类推

  3. 这里有一点需要注意,无论是初始化堆,还是交换数据,都调用maxHeapDown,他的参数是 array[] , int start ,int end. 这里 三个参数一个都不能少,start 我觉得这里不好,应该形容为node节点。end可以理解,在交换数据时,需要调整的堆大小是不断变小。 start 这个参数比较微妙。我的理解是调整这个节点在其子节点中的位置,并在原来的位置替换合理的节点(注 不是他最后的位置的节点)。而由于在交换数据时,本身堆除了跟节点,就是符合最大堆特性。就像初始化堆一样,需要从底往上初始化。(这边的参数也是参考 如果天空不死)

    由于已经符合,所以直接调整节点 array[0] 即可。

    所以初始化堆也好,交换数据也好,本质上就是在筛选调整节点位置。这只是我的理解。,,,,堆排序初始化需要从下往上才能初始化最大堆。而交换数据相当于初始化堆的最后一步再现。

3. 代码剖析

​ heapSortAsc

    private static void heapSortAsc(int[] array) {int i;int n=array.length;for (i=n/2-1;i>=0;i--) //初始化堆maxheapDown(array,i,n-1); // 注意参数,遍历所有非叶节点for (i=n-1;i>0;i--){  //交换数据int tmp=array[0];array[0]=array[i];array[i]=tmp;maxheapDown(array,0,i-1); // 只有根节点不符合最大堆的要求}}

​ maxheapDown

private static void  maxheapDown(int[] array,int start,int end){    //start 理解为 node 节点更好。 或者干脆改过来吧int c=start;                                                    //调整某个节点在适当分支int left=2*c+1;                                                 //这样0,i-1 参数更加容易理解int tmp=array[c];for (;left<=end;c=left,left=2*left+1){if (left<end&&array[left]<array[left+1])   //left<end  必须放在前面{left++; //选择大的往上面替换。}if(tmp>=array[left])break;else {array[c]=array[left];array[left]=tmp; // 疑问二,tmp一直不变}}}

转载于:https://www.cnblogs.com/EsMussSeinHui/p/11156235.html

# heapsort相关推荐

  1. 堆排序——HeapSort

    基本思想: 图示: (88,85,83,73,72,60,57,48,42,6) 平均时间复杂度: O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上 ...

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

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

  3. JavaScript实现heapsort堆排序算法(附完整源码)

    JavaScript实现heapsort堆排序算法(附完整源码) Heap.js完整源代码 MinHeap.js完整源代码 Comparator.js完整源代码 Sort.js完整源代码 HeapSo ...

  4. 【CLRS】《算法导论》读书笔记(一):堆排序(Heapsort)

    堆排序(Heapsort) 维基百科:http://en.wikipedia.org/wiki/Heapsort 时间复杂度:O(n log n) 示例: [6, 5, 3, 1, 8, 7, 2, ...

  5. 一二三系列之优先队列、st表——Battle,Heapsort,A Magic Lamp

    文章目录 Battle Heapsort A Magic Lamp Battle source 如果怪兽先死,那么英雄血量不足也没关系 反悔贪心 每次都先杀怪兽再说,如果血量不够了,就倒回去从怪兽打出 ...

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

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

  7. HeapSort 堆排序

    堆排序算法: 思路: 先将序列构成一个大顶堆,然后将将第一个元素和剩余大顶堆的最后一个元素调换,然后将然后元素数再-1,再将剩下的调整为大顶堆,一直循环,具体思路见代码注释. 注:堆排序的时间复杂度为 ...

  8. [转载]堆排序(HeapSort) Java实现

    堆排序的思想是利用数据结构--堆.具体的实现细节: 1. 构建一个最大堆.对于给定的包含有n个元素的数组A[n],构建一个最大堆(最大堆的特性是,某个节点的值最多和其父节点的值一样大.这样,堆中的最大 ...

  9. 堆排序(Heapsort)

    堆排序(Heapsort) class Program{static void Main(string[] args){int[] arr = { 4, 10, 3, 5, 1, 2,16};int ...

  10. 堆排HeapSort

                堆排序是一种树形选择排序,是对直接选择排序的有效改进. 堆的构建-->堆排: 1.算法思想 堆:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆. ...

最新文章

  1. UOJ 52 元旦激光炮
  2. linux ls 升序,ls 命令查看文件时候,按修改时间倒序或升序排列
  3. Windows环境下MySQL 5.7的安装、配置与卸载
  4. linux伙伴系统算法,Linux伙伴系统(三)--分配
  5. poj3061 尺取法 挑战程序设计竞赛
  6. 鼠标指向变成英文导航(CSS)_网页代码站(www.webdm.cn)
  7. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...
  8. 意外的服务器响应pdf,服务器安全(安骑士).pdf
  9. gom引擎登录器_GOM传奇引擎微端配置详细架设语音教程
  10. 第二章 oracle 10g体系结构及安全管理
  11. WebRoot 与 WEB-INF 相关问题学习整理
  12. python threading_Python threading
  13. 欲取代Android的Firefox OS 的意外复兴
  14. Thinking in Java---从哲学家就餐问题看死锁现象
  15. 入门 | 我们常听说的置信区间与置信度到底是什么?
  16. 图形化编写html,怎么使用Pytest+Allure生成漂亮的HTML图形化测试报告
  17. java遍历几种,【Java】集合遍历的概念及遍历的几种方式
  18. 如何将源生DrawerLayout满屏显示只覆盖ActionBar
  19. 桌面微型计算机,一、微机室(云桌面).PDF
  20. 网页的横向打印的三种方案(print your page landscape)

热门文章

  1. php为什么要有非静态方法,php中非静态方法的静态调用【解释】
  2. 数字图像处理与机器视觉_简单自动智能识别物体程序(机器视觉+数字图像处理)...
  3. 决策树(七)--Boost及源码分析
  4. clickhouse 物化视图_再谈clickHouse:微博基于 ClickHouse 监控百亿流量下的指标
  5. 产品 电信nb接口调用_通用电信华为物联网IOT开放平台NB-IOT对接profile透传编解码插件离线定制开发...
  6. Presto 日期和时间函数
  7. Swift - 炫酷放射弹出按钮菜单(改造自AwesomeMenu)
  8. server 2008 R2+IIS7.5安装cacti实验
  9. manage.py和simplejson调用报错解决
  10. [解决方案]在Sql Server 2008/2005 数据库还原出现 3154错误