两种选择排序


简单选择排序
想象一下,你手里有一堆乱序的扑克牌,你要把它们从小到大排好。简单选择排序的做法就是:
找最小的:每次你从剩下的牌里找到最小的那一张,然后把它放到已经排好的牌堆的最上面。
重复这个过程:你不断重复这个动作,直到所有的牌都被排好。
空间占用少:你不需要额外的地方来放牌,就在原地操作。
速度一般:这个方法简单,但是如果你有很多牌,效率就不高了,因为每次都要从头到尾找最小的牌。
可能会打乱顺序:如果你有两张相同的牌,这个方法可能会让它们的位置互换,所以它不是稳定的。
堆排序
堆排序就像是你在玩一个特殊的堆牌游戏:
建立堆:首先,你要把牌堆成一个特殊的形状,叫做堆。在这个堆里,每张牌都比它下面的牌大(或者小),这取决于你是在玩大根堆还是小根堆。
取出最大的牌:游戏开始,你把堆顶的牌(最大的那张)拿走,放到一边。
调整堆:然后你把堆的最后一张牌放到顶上,重新调整堆的形状,让它继续保持堆的规则。
重复操作:你不断重复这个过程,直到所有的牌都被拿走。
空间占用少:和简单选择排序一样,你不需要额外的空间。
速度快:堆排序比简单选择排序快多了,尤其是当你有很多牌的时候。
不稳定:和简单选择排序一样,堆排序也可能会让相同的牌位置互换。
这两种方法各有千秋,简单选择排序简单易懂,但效率不高;堆排序速度快,但实现起来稍微复杂一些。
 

知识点链接
简单选择排序
基本思想:这种排序方法的核心思想是在每一轮中从待排序的元素中选出关键字最小的元素,然后将其放置到已排序序列的末尾。这个过程重复进行,直到所有元素都被排序。
实现过程:
假设排序表为 L[1...n] ,第 i 趟排序从 L[1...n] 中选择关键字最小的元素,并将其与 L[i] 交换。
随着 i 的增加,每一趟排序可以确定一个元素的最终位置。
经过 n-1 趟排序后,整个排序表将变得有序。
性能分析:
空间复杂度:O(1),因为排序过程中只需要一个额外的存储空间来交换元素。
时间复杂度:在最坏的情况下,需要进行 n-1 次遍历,每次遍历都需要比较 n-i 个元素,因此时间复杂度是O(n^2)。
稳定性:简单选择排序是不稳定的排序算法,因为相同值的元素可能会在交换过程中改变它们原来的顺序。


堆排序
基本概念:
堆:堆是一种特殊的完全二叉树,其中任何一个非叶节点的值都不大于(或不小于)其左右子节点的值。
大根堆:每个节点的值都不小于它的左右子节点的值。
小根堆:每个节点的值都不大于它的左右子节点的值。
实现过程:
首先,根据大根堆或小根堆的规则将待排序元素建立成相应的二叉树,根节点将是最大值或最小值。
当根节点输出后,将堆的最后一个元素与堆顶元素交换,然后根据堆的规则向下调整以保持堆的性质。
重复上述过程,直到堆里只剩下一个元素。
性能分析:
空间复杂度:O(1),与简单选择排序一样,堆排序也只需要一个额外的存储空间。
时间复杂度:堆排序的时间复杂度是O(n log n),这是因为构建堆的时间是O(n),而每次从堆中移除最大或最小元素并重建堆的时间是O(log n)。
稳定性:堆排序同样是不稳定的排序算法,因为在调整堆的过程中,相同值的元素可能会改变它们原来的顺序。
这两种排序算法各有优缺点,选择排序简单易实现,但效率较低,适用于小规模数据集或部分有序的数据集。堆排序效率较高,适用于大规模数据集,但实现相对复杂。
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值