a = [2,1,3,4,5] n = len(a)
冒泡排序
#for i in range(n-1):
# for j in range( 0, n-2-i+1 ):
# if a[j] > a[j+1]:
# a[j],a[j+1] = a[j+1], a[j]
针对部分无序的情况,我们可以进行一个优化
优化的方法是:根据flag标志
# flag = True #默认有序
# k = n
# while flag:
# flag = False
# for j in range(k-1):
# if a[j] > a[j+1]:
# a[j],a[j+1] = a[j+1], a[j]
# flag = True
# k -= 1
针对情况2,我们发现去记录本趟的交换位置,那么下一趟可以减少比较的次数
进一步优化
# pos = n
# while pos > 0:
# k = pos
# pos = 0
# for j in range(0,k-1):
# if a[j] > a[j+1]:
# a[j],a[j+1] =a[j+1],a[j]
# pos = j
情况3, 双向冒泡
for i in range(n//2):
#从左到右
for j in range( i,n-1-i ):
if a[j] > a[j+1]:
a[j],a[j+1] = a[j+1],a[j]
#从右到左
for j in range(n-2-i ,i,-1 ):
if a[j] > a[j+1]:
a[j],a[j+1] = a[j+1],a[j]
print(a)
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com