两种交换排序


冒泡排序
想象一下,你有一缸金鱼,但是它们乱糟糟的,你想把它们从小到大排列好。冒泡排序就像你用手指轻轻搅动鱼缸,让小鱼慢慢浮到水面,大鱼沉到底部。具体操作就是:
从缸的一头开始,看看相邻的两条金鱼,如果大的在前,小的在后,就把它们的位置换一下。
继续这样做,直到你把整个缸搅一遍,最小的金鱼就浮到最上面了。
然后你再搅一遍,但这次不用管已经排好的小鱼。
如果搅的过程中,没有金鱼需要换位置了,那就说明它们已经排好了。
冒泡排序的好处是简单,不需要额外的空间,但它的缺点是慢,特别是金鱼(数据)很多的时候。


快速排序
快速排序就像是你有一个魔术棒,可以快速地把金鱼分成两拨,一拨是比某个特定大小小的,另一拨是比它大的。具体操作是:
你先挑一条金鱼作为标准,然后挥动魔术棒,把比它小的金鱼都赶到一边,比它大的赶到另一边。
然后你再对这两拨金鱼分别用魔术棒操作,直到每拨只剩下一条金鱼。
因为每次你都能很快地把金鱼分开,所以这个过程比冒泡排序快多了。
快速排序的优点是快,特别是金鱼(数据)很多的时候。但它的缺点是不稳定,有时候可能会把原本挨在一起的金鱼(相同大小的数据)分开。
总的来说,冒泡排序像是慢慢搅动鱼缸,而快速排序像是用魔术棒快速分拨。两者各有优缺点,用哪个就看你的金鱼(数据)是什么样的了。
 

知识点链接
交换排序基本概述
交换排序是一种排序算法,它通过比较序列中的元素,根据比较结果来交换元素的位置,以实现排序的目的。
冒泡排序
实现过程:
从序列的一端开始,相邻元素两两比较,如果顺序错误(即后面的元素比前面的元素大),则交换它们的位置。
经过一轮比较后,最小的元素会“冒泡”到序列的开始位置(或最大的元素会移动到序列的末尾)。
重复这个过程,每轮比较后,已排序的元素不再参与下一轮比较。
如果在一轮比较中没有发生任何交换,说明序列已经有序,排序可以提前结束。
性能分析:
空间复杂度: O(1),因为冒泡排序是原地排序,不需要额外的存储空间。
时间复杂度:
最好情况:O(n),当序列已经是有序的,只需要进行一次遍历。
最坏情况:O(n^2),当序列是逆序的,需要进行n*(n-1)/2次比较。
平均情况:O(n^2),平均情况下的时间复杂度与最坏情况相同。
稳定性: 冒泡排序是稳定的排序算法,因为它不会改变相同元素之间的相对顺序。
快速排序
实现过程:
选择一个元素作为“枢纽”(pivot)。
通过一趟排序,将序列分为两部分,一部分包含所有小于枢纽的元素,另一部分包含所有大于枢纽的元素。
对这两部分递归地应用快速排序算法。
当每个子序列缩小到只有一个元素或为空时,整个序列就排序完成了。
性能分析:
空间复杂度:
最好情况:O(log n),递归调用的深度。
最坏情况:O(n),递归调用的深度。
时间复杂度:
最好情况:O(n log n),当每次划分都能将序列均匀地分为两部分时。
最坏情况:O(n^2),当每次划分都极不平衡,比如每次选择的枢纽都是最大或最小元素时。
平均情况:快速排序的平均性能接近最好情况,是所有内部排序算法中平均性能最优的。
稳定性: 快速排序是不稳定的排序算法,因为在分区过程中相同元素可能会被交换。
总结
冒泡排序和快速排序都是基于元素比较的排序算法,但它们的实现机制和性能特点有所不同。冒泡排序简单但效率较低,适合小规模数据或部分有序的数据集。快速排序效率高,但需要选择合适的枢纽元素以避免最坏情况的发生,适合大规模数据集。
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值