美文网首页
排序:六. 堆排序(利用堆结构(二叉完全树)的弹出/下沉操作排序

排序:六. 堆排序(利用堆结构(二叉完全树)的弹出/下沉操作排序

作者: DJN_ | 来源:发表于2018-12-14 11:06 被阅读0次

平均情况、最好情况和最坏情况的时间复杂度都为O(nlog2n),即线性对数复杂度,不稳定的排序算法。

堆结构在 数据结构:二叉完全树(堆) 一文中进行了分析,接下来用代码来实现其几个关键操作:弹出、插入、取顶、上浮、下沉

堆操作实现

这里的实现以小根堆为例:


image.png

堆的基本操作接口定义:


image.png

弹出方法

弹出时将数组尾元素放到到数组首部,然后对数据首部(根节点)执行下沉操作即可。


image.png

插入方法

插入时将新元素放到数组尾部,然后对尾部元素执行上浮操作即可。


image.png

取顶方法

返回数组首部元素即可


image.png

上浮方法

image.png

下沉方法

image.png

数组元素交换方法以及获得所有元素方法

image.png

堆排序的实现

创建新的数组,将所有待排序元素 push 到二叉堆结构中,然后依次弹掉堆顶即可。堆结构在每次执行pop方法时都会执行下沉操作使堆结构中保存的数组的第一个元素为排序后下一个位置应该存放的元素。

实现类为 HeapSort

image.png

测试

测试

代码已上传 GitHub,可以在 这里 找到

相关文章

  • java堆排序

    什么是堆排序:图解堆排序堆排序:利用了堆这种数据结构堆数据结构:特殊的完全二叉树,因为具有以下的特点:1)每个结点...

  • 堆排序

    堆排序 堆排序(Heapsort) 是指利用堆这种数据结构所设计的一种排序算法. 堆是一个近似完全二叉树的结构, ...

  • Java排序算法 - 堆排序

    堆排序 堆排序是基于堆这种数据结构的一种排序算法,通过每一次弹出堆顶元素,实现排序。预备知识: 堆是一棵完全二叉树...

  • 排序:六. 堆排序(利用堆结构(二叉完全树)的弹出/下沉操作排序

    平均情况、最好情况和最坏情况的时间复杂度都为O(nlog2n),即线性对数复杂度,不稳定的排序算法。 堆结构在 数...

  • 排序算法⑦——堆排序

    堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同...

  • 堆排序

    堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同...

  • Android 算法之排序算法(堆排序)

    堆排序 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并...

  • 数据结构与算法-堆排序

    堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节...

  • 数据结构--堆排序

    堆排序是利用“堆”这种数据结构而设计的一种排序算法,堆排序也是一种选择排序。一、堆堆是具有以下性质的完全二叉树:每...

  • 【数据结构与算法】排序-3

    堆排序是利用堆这种数据结构所设计的一种排序算法,堆是一个近似完全二叉树的结构,堆排序中我们用到的堆满足一个性质,孩...

网友评论

      本文标题:排序:六. 堆排序(利用堆结构(二叉完全树)的弹出/下沉操作排序

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