冒泡法排序是一种经典的排序算法,其原理是从输入的列表第一个数开始,依次比较两个相邻的数,前一个数比后一个数大,就进行交换,一轮遍历结束后,最大的数字就到达列表的最后一个位置,再次进行循环遍历,就能够实现从小到大的排序了。
其代码实现是
def bubble_sort(li):
for i in range(len(li)-1):#表示第i次冒泡
for j in range(len(li)-1-i):
if li[j] > li[j+1]:
li[j] ,li[j+1] = li[j+1] ,li[j]
print(li)
lis1 = [1,5,3,60,5,8,9,4]
bubble_sort(lis1)
其运行结果是:
如果细心一点就会发现在第5次遍历的时候,就已经实现了排序,那么后面几次排序就是多余的了,那么怎么解决这个问题呢?
只需要加入标志位,判断一次遍历是否进行了交换,没有的话说明已经完成了排序,就可以返回了。
def bubble_sort(li):
for i in range(len(li)-1):#表示第i次冒泡
change = False #表示这一次是否发生了交换
for j in range(len(li)-1-i):
if li[j] > li[j+1]:
li[j] ,li[j+1] = li[j+1] ,li[j]
change = True
if not change:
return
print(li)
lis1 = [1,5,3,60,5,8,9,4]
bubble_sort(lis1)