1.介绍:冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
2.优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(即在第n-1次排序之前排好序之后就不用再排序了)
3.动图来源:https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715&wid=1621761486436
4.代码实现
import random
import time
def sorted(sortlist):
flag = False
time = 0
for i in range(len(sortlist) -1 ):
time = time + 1
for j in range(len(sortlist) -i -1 ):
if sortlist[j] > sortlist[j+1]:
flag = True
temp = sortlist[j+1]
sortlist[j+1] = sortlist[j]
sortlist[j] = temp
if flag == False: #这个if-else很精髓,让你可以判断 本次冒泡是否有改动,若有改动就把flag置False,若无改动了说明不需要改动了,则break
break
else:
flag = False
# print("time = ",time) #这是排序第time-1次后才不用再次排序,因此第time次是没有变换位置的
# for i in range(len(sortlist)):
# print(sortlist[i])
l = []
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
for i in range(80000):
l.append(int(random.random()*100000000))
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
sorted(l)
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))