python算法9.4——鸡尾酒排序

# 鸡尾酒排序是冒泡排序的升级版,属于双向冒泡排序
# 基本原理:(以升序为例)
# 1.找出最大值放到最后;找到最小值放到最前(同一步中进行,但有先后)
# 2.找出第二大值放到倒二;找到第二小值放到第二
# 3.重复实现升序
# 实现过程:外层循环,控制总的循环次数n/2取整(偶数时正好排列完毕,奇数时中间剩余的也正好排列),
# 第一内层循环,大值后移,第二内层循环,小值前移;



import random
Range = 10
Length = 5

list = random.sample(range(Range),Length)    #在指定序列中随机获取指定长度片段
print('before sort:',list)

for i in range(int(Length/2)):                   #控制循环次数

    for j in range(i,Length-i-1):           #大值后移
        if list[j] > list[j + 1]:
            list[j + 1], list[j] = list[j], list[j + 1]

    for k in range(Length-i-2,i,-1):        #小值前移,逆序遍历
        if list[k] < list[k-1]:
            list[k-1],list[k] = list[k],list[k-1]

print('after sort:',list)


# 如果在一次检索中,未发生交换,说明已经排序完毕,可以停止剩余循环
# 加入停止标志
import random
Range = 10
Length = 5
sign = 1

list = random.sample(range(Range),Length)    #在指定序列中随机获取指定长度片段
print('before sort:',list)

for i in range(int(Length/2)):                   #控制循环次数
    if sign:
        sign = 0
        for j in range(i,Length-i-1):           #大值后移
            if list[j] > list[j + 1]:
                list[j + 1], list[j] = list[j], list[j + 1]

        for k in range(Length-i-2,i,-1):        #小值前移,逆序遍历
            if list[k] < list[k-1]:
                list[k-1],list[k] = list[k],list[k-1]
                sign = 1
    else:
        break

print('after sort:',list)
 

猜你喜欢

转载自blog.csdn.net/nominior/article/details/82392383