堆排序(详情讲解)

堆排序是一种选择排序方法,利用大顶堆或小顶堆性质进行排序。首先建立初始堆,然后通过交换堆顶元素与末尾元素并调整堆来逐步得到有序序列。堆排序的空间复杂度为O(1),最坏时间复杂度为O(nlog2n),但它是不稳定的排序算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

     

  小顶堆:每个节点的值都小于或者等于它的左右子节点的值

 

2.0示意图

 大堆顶:

  • 堆排序是一种重要的选择排序方法,它只需要一个记录大小的辅助存储空间,每个待排序的记录仅占用一个记录大小的存储空间,因此弥补了树形选择排序的弱点。

  • 大顶堆:每个节点的值都大于或者等于它的左右子节点的值。

  • 一般升序采用大顶堆,降序采用小顶堆

  • 基本思想:

    • 首先将这n条记录按关键字值的大小建立堆(称为初始堆),将堆顶元素r[0]与r[n-1]交换

    • 然后,将剩下的{r[0]..r[n-2]}序列调整成堆

    • 再将 r[0]与r[n-2]交换,再将剩下的{r[0]..r[n-3]}序列调整成堆

    • 如此反复,直到整个序列有序。

    • 这个过程称为堆排序

  • 要实现堆排序需解决以下两个主要问题:

    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    程序员爱摸鱼

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值