0x01 原理
冒泡排序它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上漂浮(左移),或者使关键字大的记录如石块一样逐渐向下坠落(右移)。
0x02 时间复杂度
冒泡排序的时间复杂度为 O ( n 2 n^2 n2) ,且是一个稳定排序,
0x03 例子
右移冒泡(图片来源于菜鸟教程)
题目:5,6,3,7,9,12,46,8
左移冒泡过程:
- 5,6,3,7,9,12,8,45
- 5,6,3,7,9,8,12,45
- 5,6,3,7,8,9,12,45
- 5,6,3,7,8,9,12,45
- 5,6,3,7,8,9,12,45
- 5,3,6,7,8,9,12,45
- 3,5,6,7,8,9,12,45(完成一轮排序,后面继续循环)
0x04 代码实现
def buttle_sort(a):
for i in range (1,len(a)): #从第二个元素开始比较
for j in range(i,0,-1): #元素与前一个元素比较
if (a[j] < a[j-1]): #小于则交换
mid = a[j]
a[j] = a[j-1]
a[j-1] = mid
else: #提前结束循环,提高效率
break
a = [9,6,3,1,8,9,22,75,36,95,12,45,20]
print(a)
buttle_sort(a)
print(a)