python实现快速排序

快速排序:

 54  26  93  17  77   31  44   55   20                

以第一个数为中间数,找一个位置使其左侧的都比其小,右侧的都比其大

方法:

可以看作有两个指针,从两侧往中间移动,如果右侧的指针指向的数字比中间值小,就把他移动到左侧,如果左侧指针指向的数字比中间值大,就将其移动到右侧,一次循环结束后中间值右侧均比其大,左侧均比其小。

二次循环时,把中间值左右两侧各作为一个新序列,均以第一个为中间值再次排序。每次循环都形成两个以中间值为界限分开的两个新序列。经过多次循环最终得出排序完成的序列。

# coding:utf-8

def quick_sort(alist,first,last):
    """快速排序"""
    if first >=last:
        return
    mid_value = alist[first]
    low = first
    high = last
    while low < high:
        #high 左移
        while low < high and alist[high] >= mid_value:
            high = high-1
        alist[low] = alist[high]

        while low < high and alist[low]< mid_value:
            low = low+1
        alist[high] = alist[low]
    #从循环退出时,low == high
    alist[low] = mid_value

    #对low左边的序列执行快速排列
    quick_sort(alist, first,low-1)

    #对low右边序列进行快速排序
    quick_sort(alist,low+1,last)



if __name__ =="__main__":
    li = [54,26,93,17,77,31,44,55,20]
    print(li)
    quick_sort(li,0,len(li)-1)
    print(li)

            因为在一次循环后,分为两个新序列,两个新序列都需要进行排序,所以代码中用到了递归方法。

在二次及多次循环时,应设置好起始位置,即可调用函数,完成循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值