堆排序

作者: Snipers_onk | 来源:发表于2019-09-27 19:54 被阅读0次

堆排序算法利用的结构来执行快速排序。

为了实现从最低到最高排序,堆排序首先将未排序的数组转换为最大堆,以便数组中的第一个元素最大。

假设要排序的数组是:

[ 5, 13, 2, 25, 7, 17, 20, 8, 4 ]

首先将其转换为最大堆,如下所示:



此时堆的内部数组为:

[ 25, 13, 20, 8, 7, 17, 2, 5, 4 ]

现在开始对堆进行排序操作

  1. 将第一个元素索引0与n-1索引进行调换
[ 4, 13, 20, 8, 7, 17, 2, 5, 25 ]
  *                          *
  1. 现在,新的根节点4将会小于其子节点,所以要使用shift down或heapify过程,将最大堆固定为n-2。修复堆后,现在的根是数组中第二大的元素:
[20, 13, 17, 8, 7, 4, 2, 5 | 25]
  1. 将第一个元素与n-2索引处的元素进行调换
[5, 13, 17, 8, 7, 4, 2, 20 | 25]
 *                      *
  1. 继续修复堆并使最大堆固定位n-3
[17, 13, 5, 8, 7, 4, 2 | 20, 25]
  1. 重复此过程,知道整个数组完成排序
    ...

堆排序与选择排序非常相似,选择排序会在数组其余部分反复查找最小值。对于堆排序来说,提取最小值或者最大值是最擅长的。

总结

在最佳,最差和平均情况下,堆排序的性能为O(N LogN)。因为我们直接修改数组,所以堆排序不需要额外的空间。但是堆排序并不稳定,不会保留相同元素的顺序。

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/xfmauctx.html