堆排序与桶排序

本文介绍了堆排序和桶排序两种不同的排序算法。堆排序利用完全二叉树的特性,通过调整节点使得每次取出的最大元素位于数组末尾,达到排序效果,其时间复杂度为O(nlog(n))。桶排序则适用于数据分布均匀的情况,根据数据范围将数据分配到不同桶内进行排序,整体时间复杂度为O(dn),其中d为位数的最大值。

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

堆排序(数组存储)
1.堆是一个完全二叉树。
    完全二叉树的定义是除了最后一层没放满,以及最后一层的叶子都是偏左放置。
2.每个节点大于或等于它的任意一个孩子。

关于排序问题,我们首先要知道:
1.双亲节点位置为(i - 1)/ 2
2.孩子节点位置为  左孩子: ( 2 * i ) + 1
                             右孩子 :   ( 2 * i ) + 2

下面就是具体的实现
我们了解到堆排序是在数组中的实现,每次排序宏观上是将最大的放到数组最后
看上去和选择排序一样,但是实现的方法不一样,堆排序的算法效率到达了O(nlog(n))

每次删除最后一个元素,也就是最大的元素,返回此元素
我们就按照二叉树来说,每次我们取到树的root,作为二叉树,
那么root上肯定放的是最大元素,将root取出
root位置上的元素放的是它孩子结点中最大的那个元素
循环判断, 使我去掉了root后,仍然是一个完全二叉树
最后,root到最后一个,返回root元素,并删除。

桶排序
算法效率为O(dn) 
d为位数的最大值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值