"""
@author: jjcoder
@file: 冒泡排序.py
@time: 9/12/197:38 AM
"""
"""
最优时间复杂度:O(n) 表示遍历一次发现没有任何可以交换的元素,排序结束
最坏时间复杂度:O(n^2)
稳定性: 稳定
冒泡排序的运作过程(这里按照升序的方式):
1.从头开始比较相邻两个元素,如果第一个比第二个大,交换他们
2.对每一对相邻元素做相同的工作, 这步做完之后,会发现最后一个元素是最大的.
3.针对所有元素重复以上的步骤,除了最后一个
4.继续重复以上步骤,知道不在出现需要交换的元素.
"""
def bubble_sort(alist):
"""冒泡排序"""
n = len(alist)
for j in range(n - 1):
count = 0
for i in range(n - 1 - j):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 == count:
break
"""
i 0 ~ n-1 range(0, n-1) j = 0 | range(0, n - 1)
i 0 ~ n-2 range(0 ~ n-2) j = 1 | range(0, n - 1 - 1)
i 0 ~ n-3 range(0 ~ n-3) j = 2 | range(0, n - 1 - 2)
i 0 ~ n-4 range(0 ~ n-4) j = 3 | range(0, n - 1 - 3)
i 0 ~ n-5 range(0 ~ n-5) j = 4 | range(0, n - 2 - 4)
最后的结果: range(0, n - 1 - j) (总的来说, 已经排列过的匀速不需要在排了)
"""
def bubble_sort01(alist):
n = len(alist)
for j in range(n - 1, 0, -1):
count = 0
for i in range(j):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 == count:
return
if __name__ == "__main__":
li = [11, 44, 22, 77, 99, 101, 22]
print(li)
bubble_sort(li)
print(li)