基础版冒泡排序:
import random
def bubble_sort(list_x):
for i in range(len(list_x) - 1):
for j in range(len(list_x) - 1 - i):
if list_x[j] > list_x[j+1]:
list_x[j], list_x[j+1] = list_x[j+1], list_x[j]
list1 = [random.randint(0, 100) for i in range(10)]
print(list1)
bubble_sort(list1)
print(list1)
# =============输出结果=============
[60, 18, 11, 48, 36, 44, 80, 70, 19, 32]
[11, 18, 19, 32, 36, 44, 48, 60, 70, 80]
但是我们遇到了一个问题如下:
def bubble_sort(list_x):
for i in range(len(list_x) - 1):
for j in range(len(list_x) - 1 - i):
if list_x[j] > list_x[j+1]:
list_x[j], list_x[j+1] = list_x[j+1], list_x[j]
print(list_x) # 我们把每次排序的过程打印出来
list1 = [1, 2, 3, 10, 5]
bubble_sort(list1)
# =====================输出结果========================
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
问题显而易见,运算过程很不友好,所以我们进行改良:在每一次排序后做一个判断,如果列表已经排好序,那么就不继续进行,直接return结束掉。
def bubble_sort(list_x):
for i in range(len(list_x) - 1):
change = False
for j in range(len(list_x) - 1 - i):
if list_x[j] > list_x[j+1]:
list_x[j], list_x[j+1] = list_x[j+1], list_x[j]
change = True
if not change:
return
print(list_x)
list1 = [1, 2, 3, 10, 5]
print(list1)
bubble_sort(list1)
# ==========输出结果===========
[1, 2, 3, 10, 5]
[1, 2, 3, 5, 10]