堆排序

本文详细介绍了堆排序的基本概念及其实现过程。首先通过将一维数组构建成大顶堆或小顶堆来完成初始化,之后通过不断移除根节点并调整堆结构的方式进行排序。该方法的时间复杂度为O(n*log2n),优于传统的O(n*n)排序算法。

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

       我想说的不是内存中的堆空间,这里的堆只是一种组织方式,采用的是用完全二叉树的形式来表示一维数组,就是说如果是一个大顶堆的话,根部的数是最大的,从根部开始,一层一层对应数组,例如数组int a[6]={6,5,4,3,2,1},a[0]是根部,a[1] 是左子节点,a[2]是右子节点,。。。。。。

       如果要对一个一维数组进行堆排序的话,首先要把这个一维数组初始化为一个大顶堆,或者是一个小顶堆,用的时间0(n),看c++算法分析,然后对于一个个数为n的堆,数的高度为log2 n+1,则每次删除根部后,平均移动的时间0(log2 n),所以堆排序的时间O(n*log2 n),小于O(n*n)。

        具体分析:

        删除:删除根部后,然后比较它的两个子节点,找到最大后放到根部,然后依次下去比较直到结束。

        初始化堆:从n/2到1,作为根部,进行排序。

        具体,看c++算法分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值