数据结构—堆排序

本文介绍了堆排序这种基于堆的排序算法。首先讲解了堆排序的原理,通过与最后一个元素交换并调整堆来实现降序排列。接着,详细阐述了堆排序的步骤,包括建堆、交换和调整,以及如何通过图形分析理解排序过程。最后,分析了堆排序的时间复杂度为O(nlgn),空间复杂度为O(1),并指出该算法不稳定。
摘要由CSDN通过智能技术生成

堆排序

堆排是基于堆的一种排序算法,对于堆的了解请点开链接:https://blog.csdn.net/z_x_m_m_q/article/details/82320357(创建、插入、删除) 

算法思想:

之前的博客写了小堆,由于降序排列是根据小堆性质进行排列的,顺着前面的知识这里我们讨论从大到小的排列

首先小堆建好之后堆顶数据是堆中最小的数据,将堆顶元素与最后的一个元素交换位置,这样最后元素就出在有序区间了。再对除有序区间外的其他数据从堆顶开始来一次向下调整,这样堆顶数据又是堆中最小的数据,重复上述步骤直至堆中只剩下一个元素。

以具有N个数据的数组 a[N] 为例,说下对排序的步骤:

  1. 利用数组中元素建立节点量为 N 的小堆
  2. 第一次将a[0] 与 a[N-1]交换位置,对a[0]至a[N-2]进行一次向下调整,重新恢复成小堆(此时堆的节点量为N-1)
  3. 第二次将a[0] 与 a[N-2]交换位置,对a[0] 至 a[N-3]进行一次向下调整,重新恢复成小堆(此时堆的节点量变为n-2)
  4. 重复这样的操作,直至 a[0] 与 a[1]交换

图形分析:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值