前言
- 假设传入的列表为[4,3,2,1,
40,50,60],列表后面的三个元素根本不需要排序 - 再假设传入的列表为[1,2,3,4,5,6,7],此列表本身就是有序列表
冒泡排序普通写法
def sort_list(list1):
for i in range(len(list1) - 1):
for j in range(len(list1) - 1 - i):
if list1[j] > list1[j + 1]:
list1[j], list1[j + 1] = list1[j + 1], list1[j]
print(list1)
return list1
那么普通的冒泡排序写法就会稍显不足,因为不管你传入的列表是否有序,它for循环的次数以及里面的判断都不会减少
优化写法
def sort_list(name_list):
for i in range(len(name_list) - 1):
a = True # 定义变量a,来确认是否还需要排序
for j in range(len(name_list) - 1 - i):
if name_list[j] > name_list[j + 1]:
name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j]
a = False
if a: # 进入内层的for循环都没有改变a的值,说明已经不需要排序了
break
return name_list
演示
- 加一点输出语句方便查看效果
def sort_list(name_list):
for i in range(len(name_list) - 1):
a = True # 定义变量a,来确认是否还需要排序
for j in range(len(name_list) - 1 - i):
print(f"i的值:{i} j的值:{j}")
print(f"{name_list[j]} 比较 {name_list[j + 1]}", end="\t")
if name_list[j] > name_list[j + 1]:
print("进行交换")
name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j]
print(f"交换后的列表: {name_list}")
a = False # 交换了,就改变a的值
else:
print()
print("------------------------------------------------")
if a: # 进入内层的for循环都没有改变a的值,说明已经不需要排序了
break
return name_list
传入 [1,2,3,4,5,6,7]
输出
传入 [3,2,1,40,50,60]
输出