冒泡排序(bubble sort):
-
原理:
-
重复的遍历要排序的数列, 一次比较两个元素, 如不满足我们指定的条件, 就交换两个元素的位置, 直至遍历完成, 这个算法名字的由来是因为越小的元素会慢慢 '浮' 到数列的顶端
-
-
冒泡排序算法如下:
- 对每一对相邻元素做相同的工作, 到最后, 最后的元素就是最大的
- 针对所有的元素重复以上步骤, 除了最后一个
- 持续每次对越来越少的元素重复上面的步骤, 直到没有任何一对数需要比较
- 比较相邻的元素, 在升序时如果第一个比第二个大, 就交换这两个元素的位置
-
其时间复杂度:
- 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定
-
代码实现如下:
#!/usr/bin/python3
# coding=utf-8
def bubble_sort(a_list):
"""冒泡排序"""
n = len(a_list)
# 外层循环控制从头走到尾的次数
for i in range(n-1):
# i: [0, 1, 2, ...n-2]
count = 0
# 内层循环控制从头到尾的遍历
for j in range(0, n-1-i):
if a_list[j] > a_list[j+1]:
a_list[j], a_list[j+1] = a_list[j+1], a_list[j]
count += 1
if 0 == count:
break
if __name__ == '__main__':
list1 = [54, 26, 77, 17, 77, 31, 44, 55, 20]
print('排序前:%s' % list1)
bubble_sort(list1)
print('排序后:%s' % list1)
# 输出结果:
排序前:[54, 26, 77, 17, 77, 31, 44, 55, 20]
排序后:[17, 20, 26, 31, 44, 54, 55, 77, 77]