【排序】两种交换排序

知识点理解


冒泡排序
想象一下,你有一池子的鱼,但它们乱糟糟的,你想把它们按大小排个队。冒泡排序就像是你从一头开始,看到两个鱼挨在一起,如果大的在前,你就把它们换个位置。然后你继续往前看,继续换位置,直到你走到池子的另一头。这时候,最大的鱼就被排到了最后。然后你再从头开始这个过程,但这次不用再管已经排好的最大的鱼了。你就这样一遍又一遍地做,直到所有的鱼都按大小排好了队。这个过程就像是气泡从水底冒到水面,所以叫冒泡排序。


快速排序
快速排序就像是你玩一个找朋友的分组游戏。你随机选一个小朋友作为“中心”,然后让所有比这个小朋友矮的站在他左边,比他高的站在他右边。然后你再对左边和右边的小朋友分别重复这个过程,每次都是找一个小朋友作为新的“中心”,再分组。这样,很快所有的小朋友就按照身高排好队了。
冒泡排序就像是你手动一个个去比较和调整,所以如果鱼很多或者很乱,这个过程可能会很慢。而快速排序就像是你用了一个聪明的方法,每次分组都能让大部分的鱼快速排好队,所以通常来说会快很多。但是,如果一开始选的“中心”鱼的身高正好是中等,那可能就要多分几次组,速度就会慢一些。

d279eaa129f14c2c9151c30790c3a56d.jpg

 


这两种排序方法都有自己的优缺点,冒泡排序比较稳定,不会把原来排好的队伍打乱,但是速度慢;快速排序速度快,但是如果队伍一开始很乱,有时候可能需要多花点时间。
 

知识点讲解


冒泡排序
基本概述:冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列,比较每对相邻元素的大小,并在必要时交换它们的位置。
实现过程:
可以选择从序列的末尾向前或从开头向后遍历。
相邻元素两两比较,如果它们的顺序错误(即前者大于后者),则交换它们。
经过一轮遍历后,最小的元素会被放到序列的开始位置(或最大的元素放到末尾)。
重复这个过程,每轮遍历后,已排序的元素不再参与比较。
如果在一轮遍历中没有发生任何交换,说明序列已经排序完成,可以提前结束算法。
性能分析:
空间复杂度:O(1),因为只需要一个额外的存储空间。
时间复杂度:最好情况为O(n)(序列已经是正序),最坏和平均情况为O(n^2)(序列完全逆序或部分逆序)。
稳定性:是稳定的排序算法,即相等的元素在排序后保持原来的相对顺序。


快速排序
基本概述:快速排序是一种高效的排序算法,使用分治法策略来把一个序列分为较小的两个子序列。
实现过程:
选择一个元素作为“枢纽”(pivot)。
重新排列序列,使得所有比枢纽值小的元素都在它的左边,所有比枢纽值大的元素都在它的右边。
递归地将上述步骤应用于枢纽值左边和右边的子序列。
当子序列的大小减少到1或0时,排序完成。
性能分析:
空间复杂度:最好情况为O(log n),最坏情况为O(n)。
时间复杂度:最好情况为O(n log n)(当每次划分都接近平衡时),最坏情况为O(n^2)(当每次划分都极不平衡时),平均情况接近最好情况。
稳定性:快速排序是不稳定的排序算法,因为相同元素可能在分区过程中交换位置。
快速排序通常被认为是基于比较的内部排序算法中效率最高的,尽管它的最坏情况性能较差,但在实际应用中,通过合理选择枢纽元素,可以显著提高其性能。
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值