def swap(lyst,i,j):
lyst[i],lyst[j]=lyst[j],lyst[i]
def bubbleSort(lyst):
n = len(lyst)
while n>1:
i = 1
while i<n:
if lyst[i]<lyst[i-1]:
swap(lyst,i,i-1)
i += 1
n -= 1
return lyst
L=[4,3,5,1,2]
print(bubbleSort(L))
def swap(lyst,i,j):
lyst[i],lyst[j]=lyst[j],lyst[i]
def bubbleSort(lyst):
n = len(lyst)
while n>1:
i = 1
while i<n:
if lyst[i]<lyst[i-1]:
swap(lyst,i,i-1)
i += 1
n -= 1
return lyst
L=[4,3,5,1,2]
print(bubbleSort(L))
代码参考了数据结构(Python语言描述)相关书籍。
算法思想:从第一项开始,比较相邻的两个数据,直到移至列表的末尾。在移动的过程中如果两项数据的顺序不对时,交换两个数据的位置,在这个过程中会将最大项数据移至末尾。
例:[4,3,5,1,2]-{[3,4,5,1,2]-[3,4,5,1,2]-[3,4,1,5,2]-[3,4,1,2,5]}-{[3,4,1,2,5]-[3,1,4,2,5]-[3,1,2,4,5]}-{[1,3,2,4,5]-[1,2,3,4,5]}-{[1,2,3,4,5]} (其中{...}表示外层循环)
若采用改进后的算法(第二个编程示例):[4,3,5,1,2]-{[3,4,5,1,2]-[3,4,5,1,2]-[3,4,1,5,2]-[3,4,1,2,5]}-{[3,4,1,2,5]-[3,1,4,2,5]-[3,1,2,4,5]}-{[1,3,2,4,5]-[1,2,3,4,5]} (其中{...}表示外层循环),最后一次循环将不存在,直接跳出了循环。
复杂度分析:第一个示例,最好、最坏及平均情况复杂度均为O(n*n),只是当数据排好序的情况下不需要进行数据的交换。
第二个示例,最坏和平均情况下复杂度均为O(n*n),最好的情况下为O(n)。