冒泡排序:
eg: 54 26 93 17 77 31 44 55 20
从第一个开始依次与后面相邻一个数字相比较,54比26小,26排在第一个,54排到第二个,54与93再次相比54小排在前面,94去再次与后面的相比,依次轮回,得出最后结果
python语言的程序中最简单方法:
#coding:utf-8
def bubble_sort(alist):
"""冒泡排序"""
n = len(alist)
for j in range(n-1):
for i in range(0,n-1-j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[i]
if __name__ =="__main__":
li = [54,26,93,17,77,31,44,55,20]
print(li)
bubble_sort(li)
print(li)
此时最优时间不是O(n)
可以优化代码为:
#coding:utf-8
def bubble_sort(alist):
"""冒泡排序"""
n = len(alist)
for j in range(n-1):
count = 0
for i in range(0,n-1-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 = [54,26,93,17,77,31,44,55,20]
print(li)
bubble_sort(li)
print(li)
此时最优时间复杂度为O(n)
最坏时间复杂度为O(n的2次方)