冒泡排序算法(Bubble Sort)
冒泡排序算法原理: 从未排序的序列的开头开始,比较相邻的两个元素,将值大(小)放在右边,每轮比较完成都会将最大(最小)放在最后一位,下一轮就只要从开头比较到倒数第二个。以此类推,直到序列排序完毕。
对于一个有n个元素的序列,需要进行 n-1 轮循环比较.
冒泡排序算法的python 实现
代码如下:
ef bubble_sort(alist):
"""冒泡排序"""
for j in range(1, len(alist)):
# 外循环控制总轮数(n-1)轮
for i in range(0, len(alist)-j):
# 内循环控制每轮数据比较次数
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist
冒泡排序算法的优化
添加一个标识来判断原序列(或剩余部分)是否已有序
代码如下:
def bubble_sort2(alist):
"""冒泡排序"""
for j in range(1, len(alist)):
# 外循环控制总轮数(n-1)轮
count = 0 # 是否有序,如果为0,则表示序列已有序
for i in range(0, len(alist)-j):
# 内循环控制每轮数据比较次数
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
count += 1
if 0 == count:
return
return alist
冒泡排序算法的时间复杂度与稳定性
- 最优时间复杂度:O(n) (n指优化后算法内循环的遍历次数 n )
- 最坏时间复杂度:O(n2)
- 稳定性:稳定(即排序中不会改变相同元素的顺序)
注:排序算法的稳定性是指在排序的过程中不会改变相同元素彼此的位置的相对次序,反之不稳定的排序算法经常会改变这个次序。