问题 5504 --冒泡排序 遍数及次数优化(完善程序)

5504: 冒泡排序 遍数及次数优化(完善程序)★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 55  解决: 39
[提交][状态][命题人:]

题目描述

题目描述

用冒泡排序法对n个整数从小到大排序。

上浮式冒泡排序:是在一系列数据中对相邻两个数依次进行比较和交换,让较小的数“上浮” 的一种排序技术。每遍冒泡都是从最下面一个元素起,自下而上地比较相邻的两个数,把较小的数换到本遍的顶端位置。

加工遍数的优化:

若在某一遍排序中没有数据交换,说明待排序数据都已经有序,冒泡排序过程可在此遍排序后终止。因此可以引入一个逻辑变量flag,记录在每遍排序过程中是否发生了交换,每遍排序结束时检查flag,若未发生过交换则终止排序。


加工次数的优化:

在每遍冒泡过程中,若最后一次交换的是lastlast-1位置的数,则last位置之前的相邻数据均已有序。进行下一遍冒泡时,无序区域设置为[last,n),这样一遍排序可能使当前无序区域缩小。

python程序:

n=int(input())
a=list(map(int,input().split()))
flag=True
last=0
while flag==True:
   ___ ①___
    for j in range(n-1,last,-1):
        if ___②___:
            a[j],a[j-1]=a[j-1],a[j]#交换两个数的位置,使小数上浮
            flag=True
            last=__③__
for i in a:
    print(i)


输入


输出


样例输入
Copy
6
12 2 9 3 5 8
样例输出
Copy
2
3
5
8
9
12

提示

来源

[提交][状态]