for i in range(1,len(a)):
for j in range(1,len(a)):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
能排出正确答案,但是效率过于低
每一次循环,小值往前交换一次
只交换相邻两个值,每一轮没有得到最大或最小值
for i in range(1,len(a)):
for j in range(i,0,-1):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
每一次循环,我只排一个值,
左插入
for i in range(1,len(a)):
for j in range(i,0,-1):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
else:
break
左插入
优化:插入的时候,值比前面的值大,就停止插入,换下一个值
######################################
for i in range(1,len(a)):
for j in range(0,len(a)-1):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
每一次循环,从前往后交换大值
右冒泡
for i in range(1,len(a)):
for j in range(len(a),0,-1):
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
每一次循环,从后往前交换小值
左冒泡
for i in range(1,len(a)):
for j in range(0,len(a)-i-1):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
每一次循环,从后往前交换大值,过滤已排好的数
右冒泡
for i in range(1,len(a)):
f=True
for j in range(0,len(a)-i-1):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
f=Flase
if f:
break
优化:如果上一轮没有调换位置,跳出外循环,停止排序
右冒泡