python 快速排序实现

上来就上代码

ef quick_sort(lst, left, right):
    if left >= right:
        return lst
    elif right-left == 1:
        if lst[left] > lst[right]:
            lst[left], lst[right] = lst[right], lst[left]
        return lst
    else:
        i = left
        j = right
        povit = left
        povit_e = lst[povit]
        while i < j:
            while i < j:
                # 从右往左扫描,找到一个小于基准值的元素,将其与空出来的i坑交换
                # 第一次实际是填入最左端的基准元素,该元素已经被保存!
                if lst[j] >= povit_e:
                    j -= 1
                else:
                    lst[i] = lst[j]
                    i += 1
            while i < j:
                # 从左往右扫描,找到一个大于等于基准值的元素,将其与空出来的坑交换
                if lst[i] < povit_e:
                    i += 1
                else:
                    lst[j] = lst[i]
                    j -= 1
        # 所有元素已经分布于基准元素两侧,最终中间位置填入基准元素
        lst[i] = povit_e
        # 调用递归,对左右子列表进行下一轮
        quick_sort(lst, left, i-1)
        quick_sort(lst, i+1, right)
        return lst


if __name__ == "__main__":
    a = [1,3,45,65,21,12,2,2,78,54,56,23]
    b = quick_sort(a, 0 ,len(a)-1)
    print b
    print "-----------------------------------------------"
    aa = [1,11,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,11,11]
    bb = quick_sort(aa, 0 ,len(aa)-1)
    print bb
    print "-----------------------------------------------"
    aaa = [0,0,0,0,0,0,2,2,2,2,2,1,1,1,1,1,1]
    bbb = quick_sort(aaa, 0 , len(aaa)-1)
    print bbb
    print "-----------------------------------------------"
    ss = ["aa", "a", "a","aa", "aaa","b","f","e"]
    ssbb = quick_sort(ss, 0, len(ss)-1)
    print(ssbb)

执行看结果

C:\Python27\python.exe D:/代码/python-DP/QuickSort.py
[1, 2, 2, 2, 2, 2, 2, 3, 23, 23, 23, 78]
-----------------------------------------------
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11]
-----------------------------------------------
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
-----------------------------------------------
['a', 'a', 'aa', 'aa', 'aaa', 'b', 'e', 'f']

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值