美文网首页
C 语言实现堆排序 (Heap Sort)

C 语言实现堆排序 (Heap Sort)

作者: 捡个七 | 来源:发表于2019-05-01 21:24 被阅读0次

堆排序是一种基于「堆」这一数据结构的排序算法。堆是一种近似完全二叉树的结构,分为大顶堆和小顶堆这两种。

  • 大顶堆:子节点的值总是小于其父节点的值。
  • 小顶堆:子节点的值总是大于其父节点的值。

如果使用大顶堆的话,最后的排序结果会是升序;如果采用小顶堆的话,最后的排序结果会是降序。

使用大顶堆实现数字大小排序

首先会使用大顶堆来实现数字的从小到大排序,主要分为下面 3 个过程:

  • 最大堆调整:将堆的末端子节点做调整,使得子节点小于父节点。
  • 创建最大堆:将堆中所有数据排序成大顶堆的形式。
  • 堆排序:将顶端数据和最末尾数据交换位置,然后做最大堆调整的递归运算。

实现代码如下所示:

使用小顶堆实现字符串大小排序

和大顶堆的过程一样,只是有些微小的差别:

  • 最小堆调整:将堆的末端子节点做调整,使得子节点大于父节点。
  • 创建最大堆:将堆中所有数据排序成小顶堆的形式。
  • 堆排序:将顶端数据和最末尾数据交换位置,然后做最小堆调整的递归运算。

实现代码如下所示:

具体代码可见这个 repo 中的 Homework-4mid-exam

参考:

[1]. 堆排序 - 维基百科
[2]. 图解排序算法(三)之堆排序

相关文章

  • C 语言实现堆排序 (Heap Sort)

    堆排序是一种基于「堆」这一数据结构的排序算法。堆是一种近似完全二叉树的结构,分为大顶堆和小顶堆这两种。 大顶堆:子...

  • JavaScript的排序算法——堆排序

    堆排序(Heap Sort) 堆排序(Heap Sort)是一种基于比较的排序算法。堆排序可以被认为是一种改进版的...

  • 堆排序

    一、定义 堆排序(Heap Sort)是一种基于优先队列(堆实现)的排序方式。堆排序的步骤如下: 初始时待排序元素...

  • 堆排序(Heap Sort)

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

  • 堆排序(Heap Sort)

    一、算法概述 1.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于...

  • 堆排序(heap sort)

    堆排序可以认为是对选择排序的一种优化最好最坏平均时间复杂度:O(nlogn) 空间复杂度:O(1) 属于不稳定排序...

  • 3.2-选择排序-堆排序

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

  • 03-堆排序(Heap Sort)

    堆排序(Heap Sort) 结合上一讲的内容,发现选择排序可以使用堆排序来进行优化。所以堆排序可以认为是对选择排...

  • iOS - 堆排序

    Demo_github 堆排序 堆排序(Heap Sort)是一种树形选择排序,是对直接选择排序的有效改进。 堆的...

  • 7、堆排序(Heap Sort)

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

网友评论

      本文标题:C 语言实现堆排序 (Heap Sort)

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