基本思想
每次比較相鄰的兩個數,如果它們順序錯誤就把它們交換過來
對7 9 2 5 3升序排列
- 第一步:第一位的7和第二位的9比較,如果前面的值小于后面的,就交換--> 9 7 2 5 3
- 第二步:同上,比較第二位的7和第三位的2,不用交換--> 9 7 2 5 3
- 第三步:比較第三位的2和第四位的5,交換--> 9 7 5 2 3
- 第四步:比較第四位的2和第五位的3,交換--> 9 7 5 3 2
第一次循環結束,最小的數排在了最后面,在從前往后循環4次,就可以實現降序排列
python實現冒泡排序
#!/usr/bin/python
# encoding: utf-8
# 冒牌排序(降序)
# 待排序的列表
elem = [3, 10, 7, 4, 9, 8]
for i in range(1, len(elem) - 1):
# 第i趟冒泡排序
for j in range(0, len(elem) - i):
# 比較相鄰的兩個數
if elem[j] < elem[j+1]:
elem[j],elem[j+1] = elem[j+1],elem[j]
print(elem) # [10, 9, 8, 7, 4, 3]
時間復雜度
從最關鍵的雙層for循環可以看出,冒泡排序的時間復雜度為N的平方。
*參考資料《啊哈!算法》