Python实现经典排序算法-冒泡排序
2019-04-01 11:24
387 查看
冒泡排序(Bubble Sort)
1.冒泡排序概述
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2.算法思想
- 算法分析:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
- 稳定性:稳定
- 算法总结: 冒泡排序对n个项目需要O(n**2)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实现的排序算法之一,但它对于包含大量的元素的数列排序是很没有效率的。
3.代码实现
# 先分析模型,假定数46532,五个数 # ①先从左往右分析,最大数往右边靠 # 46531 # 46531 >> 45631 >> 45361 >> 45316 第一回合 # 45316 >> 43516 >> 43156 第二回合 # 34156 >> 31456 第三回合 # 13456 第四回合 # 冒泡排序,从左往右排序,先把下的放在最左边 def bubble1(list1): for i in range(len(list1)-1): for j in range(len(list1)-i-1): if list1[j] > list1[j+1]: list1[j] ,list1[j+1] = list1[j+1] ,list[j] return list1
# ②这个从右往左算法,每次把最小的数放在左边 # 46531 # 46513 >> 46153 >> 41653 >> 14653 第一回合 # 14635 >> 14365 >> 13465 第二回合 # 13456 >> 13456 第三回合 这个位置,我们发现他们之前的数比较完之后顺序整符合要求,就不改变位置了 # 13456 第四回合 # 冒泡排序,从右往左排序,先把下的放在最左边 def bubble2(list1): for i in range(len(list1)-1): for j in range(len(list1)-1,i,-1): if list1[j] < list1[j-1]: list1[j],list1[j-1] = list1[j-1],list1[j] return list1
4.代码优化
冒泡排序如果能在内部循环第一次运行时,使用一个旗标来表示有无需要交换的可能,也可以把最优情况下的复杂度降低到O(n)。在这个情况,已经排序好的数列就无交换的需要。若在每次走访数列时,把走访顺序反过来,也可以稍微地改进效率。
# ③更高效的算法 # 时间复杂度为O(N^2) # 可以设定一个标记判断这一回合是否发生交换,如果没有发生交换,可以结束这回合排序 # 找一个极限数12345 用从左到右的冒泡法排序 def bubble3(list1): count = 0 for 20000 i in range(len(list1)-1): flag = True for j in range(len(list1)-i-1): count += 1 if list1[j] > list1[j+1]: list1[j] ,list1[j+1] = list1[j+1] ,list1[j] flag = False if flag: break return list1,count print(bubble3([2,3,6,4]))
以上代码在python3.7.3环境下测试通过
相关文章推荐
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 八大排序算法 Java、Python、C++实现 -- 冒泡排序
- Python实现经典内部排序算法(归并排序)
- Python实现经典排序算法
- 经典排序算法-MFC实现之3:冒泡排序
- 排序算法(C++/JS/PYTHON/GO/JAVA/PHP实现)--冒泡排序(一)
- 用python实现经典排序算法
- 经典排序算法(一)--冒泡排序、快速排序java实现
- 用Python实现基本排序算法01——冒泡排序
- 排序算法之快速排序,冒泡排序用python代码实现
- Python实现几个经典排序算法
- 经典排序算法总结与实现 ---python
- 用Python实现排序算法――冒泡排序
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- Python实现经典排序算法(转载)
- python 实现排序算法(三)-选择排序和冒泡排序
- 经典排序算法的python实现
- Python实现经典排序算法-选择排序
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)