a = [1,2,3,4,5]
n = len(a)
# 2 1 5 4 3
for i in range(1,n):
for j in range(n-1-i):
if a[j] > a[j+1]:
a[j],a[j+1] = a[j+1],a[j]
print(a)
#1、总共比较了几次 : 4 + 3 + 2 + 1 = 10 n(n-1)/2
#2、总共交换了几次
#应该就是等于 序列中逆序对数量
#冒泡排序 改进版
flag = True
k = n-1
while flag:
flag = False
for j in range(0,k):
if a[j] > a[j+1]:
a[j],a[j+1] =a[j+1],a[j]
flag = True
k-=1
print(a)
#冒泡排序 记录位置
pos = n-1
while pos > 0:
k = pos
pos = 0
for j in range(k):
if a[j] > a[j+1]:
a[j],a[j+1] =a[j+1],a[j]
pos = j
print(a)
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com