看了许多python的冒泡排序,都有许多问题,今改正:
import random if __name__ == '__main__': l = [] count = int(input('输入排序数:')) for i in range(count): l.append(random.randint(1,100)) len_l = len(l) for i in range(0, len_l): # 0 1 2 3 4 # 添加flag,提前终止 flag = False for j in range(i, len_l-1): # 0 1 2 3 if l[j] > l[j+1]: k = l[j+1] l[j+1] = l[j] l[j] = k print(l) flag = True if not flag: break print("最终结果:", l)
许多人这样子书写都会有一些小瑕疵,请看:
原因是j的移动不会再返回,导致若中间数有较大的被弹到前面,就无法检测再排序。
改正:
方法一:第二次的循环每次都要从0开始!
j = 0 while j < len_l -1: if l[j] > l[j+1]: k = l[j+1] l[j+1] = l[j] l[j] = k flag = True j += 1
方法二:j 从大到小:
for i in range(len_l-1): # 0 1 2 3 4 # 添加flag,提前终止 flag = False for j in range (len_l - 1 - i): if l[j] > l[j+1]: k = l[j+1] l[j+1] = l[j] l[j] = k flag = True
完美解决问题。