python算法-排序改进

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
优化:如果上一轮没有调换位置,跳出外循环,停止排序
右冒泡

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容