- 标准写法(从后往前排)
def BubbleSort(a):
for i in range(len(a)-1):
for j in range(len(a)-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
return a
测试
L =[3, 1, 5, 4, 2]
BubbleSort(L)
[1, 2, 3, 4, 5]
注意此时列表L的值也变为[1, 2, 3, 4, 5]
- 从前往后排的写法
def BubbleSort2(a):
for i in range(len(a)-1):
for j in reversed(range(i+1,len(a))):
if a[j] < a[j-1]:
a[j], a[j-1] = a[j-1], a[j]
return a
测试
L =[3, 5, 2, 4, 1]
BubbleSort2(L)
[1, 2, 3, 4, 5]
- 双向排序写法,同时输出排序过程
def BubbleSort3(a):
for i in range(len(a)-1):
for j in range(len(a)-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
for j in reversed(range(i+1,len(a))):
if a[j] < a[j-1]:
a[j], a[j-1] = a[j-1], a[j]
print(a)
return a
其排序过程如下
L =[3, 5, 2, 4, 1]
BubbleSort3(L)
[3, 2, 5, 4, 1]
[3, 2, 4, 5, 1]
[3, 2, 4, 1, 5]
[3, 2, 1, 4, 5]
[3, 1, 2, 4, 5]
[1, 3, 2, 4, 5]
[1, 2, 3, 4, 5]
先将5交换到最后,然后将1交换到最前,再将4交换到倒数第二格,以此类推
双向排序过程图示