1、遇到的情况:对于s = [5, 1, 2, 3, 4]这个列表而言,只执行一次循环即可实现排序,如果继续循环,就是1与2、3、 4进行排序,很浪费时间,所以没必要。
2、解决办法:
增加标示为flag,如果flag为True则表示还要继续排序,否则直接输出。
3、代码
# coding: utf-8;
def bubble_sort(b):
n = len(b)
"""第一个循环设置冒泡排序的次数,如果有n个数,那么需要将n-1个数
进行归位;
其中flag是标志位,如果任意位置的相邻的两个数之间不用交换位置,
则flag = False,那么直接
输出,因为已经排好序了"""
for i in range(0, n-1):
flag = False
for j in range(0, n-1-i):
if b[j] > b[j+1]:
b[j], b[j+1] = b[j+1], b[j]
flag = True
if not flag:
return b
return b
a = [5, 2, 45, 6, 8, 2, 1]
print(bubble_sort(a))