cocktail_shaker 排序——python(冒泡排序改版)

from __future__ import print_function

def cocktail_shaker_sort(unsorted):
    #cocktail shaker鸡尾酒调制器,估计是边喝酒边写的,就叫CS排序,
    #冒泡排序的改版,可对比理解
    #排序结果默认升序

    #range(start, stop, step) 假设len(unsorted)=10,相当于依次取9,8,7,6···
    for i in range(len(unsorted)-1, 0, -1):
        swapped = False  #哨兵,


        #这个循环从后向前遍历,把最小元素移到第一个位置
        for j in range(i, 0, -1):
            if unsorted[j] < unsorted[j-1]: #小的元素前移
                unsorted[j], unsorted[j-1] = unsorted[j-1], unsorted[j]
                swapped = True

        #这个循环从前向后遍历,把最大元素移到最后一个位置
        for j in range(i):
            if unsorted[j] > unsorted[j+1]: #大的元素后移
                unsorted[j], unsorted[j+1] = unsorted[j+1], unsorted[j]
                swapped = True

        #经过这两个循环,每一趟都有两个元素到达最终位置
        if not swapped:#如果swapped=false就代表没有发生交换,已经有序,跳出循环
            return unsorted
            
if __name__ == '__main__':
    try:
        raw_input          # Python 2
    except NameError:
        raw_input = input  # Python 3
    
    user_input = raw_input('输入待排序的数,用\",\"分隔:\n').strip()
    #strip() 方法用于移除字符串头尾指定的字符(默认为空格)
    unsorted = [int(item) for item in user_input.split(',')]
    cocktail_shaker_sort(unsorted)
    print(unsorted)

一些说明:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值