一、背景
加深自己对经典排序算法的理解,并且探索更多简化的写法和优化的表现。
二、算法介绍
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
三、经典代码实现:
def bubble_sort_excue(random_list: list) -> list:
"""
冒泡排序 按照从小到大依次排列 每次对比相邻的两个数 判断是否需要交换位置
:param random_list: 乱序列表
:return: 顺序列表
"""
lenght = len(random_list)
if lenght <= 1:
return random_list
for i in range(lenght-1):
need_sort = False
for j in range(lenght-i-1):
if random_list[j] > random_list[j+1]:
random_list[j], random_list[j+1] = random_list[j+1], random_list[j]
need_sort = True
if not need_sort:
return random_list
return random_list
四、优化思考
1. 当传入的list是1个元素或者是空list的时候,是不需要排序的。
2. 当冒泡进行一圈,都没有发生元素交换的时候,说明此时排序已经完成,无需后面的冒泡了。