python 实现·十大排序算法之冒泡排序 (Bubble Sort)
简介
冒泡排序(Bubble Sort)是经典排序算法之一,属于交换排序的一种,基本的排序思路是:从头开始两两元素进行比较,大的元素就往上冒,这样遍历一轮后,最大的元素就会直接筛选出来。然后再重复上述操作,即可完成第二大元素的冒泡。以此类推,直到所有的元素排序完成。
算法实现步骤
比较相邻的元素,如果第一个比第二个大,就交换它们两个(确定排序规则:从小到大或从大到小);
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到没有任何一对元素需要比较,那么排序完成。
Python 代码实现
动画演示
算法分析
时间复杂度
如果数据一开始就是顺序,那么只需1趟排序即可完成。所需的比较次数C
和记录移动次数M
均达到最小值,即:
所以,冒泡排序最好的时间复杂度为O(n)
。
如果数据一开始是逆序的,则需要进行n-1
趟排序,每趟要进行n-i
次比较,且每次比较必须移动记录3次来达到交换记录位置。此时,比较和移动次数均达到最大值:
空间复杂度
空间复杂度就是在交换元素时那个临时变量所占的内存空间。最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为0;最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n)
;
所以,平均的空间复杂度为:O(1)
。
稳定性
由于在比较过程中,当两个相同大小的元素相邻,只比较大或者小,但不会交换位置。而当两个相等元素距离较远时,也只会把它们交换到相邻的位置。也就是说排序过程中,相等元素的位置前后关系不会发生任何变化,所以算法是稳定的。
综合评价
联系我们
个人博客网站:http://www.bling2.cn/
Github地址:https://github.com/lb971216008/Use-Python-to-Achieve
知乎专栏:https://zhuanlan.zhihu.com/Use-Python-to-Achieve
小专栏:https://xiaozhuanlan.com/Use-Python-to-Achieve
博客园:https://www.cnblogs.com/Use-Python-to-Achieve
版权声明: 本文为 InfoQ 作者【南风以南】的原创文章。
原文链接:【http://xie.infoq.cn/article/4116872d6661979f9b803fa7b】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论