笑笑酱大数据

鸡尾酒排序——优化的冒泡排序

2019-04-08  本文已影响0人  Aedda
# 鸡尾酒排序是冒泡排序的升级版,属于双向冒泡排序
# 基本原理:(以升序为例)
# 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)
上一篇 下一篇

猜你喜欢

热点阅读