zoukankan      html  css  js  c++  java
  • Python简单的实现快速排序

    常见的快排排序:快排实现原理,可以更好理解快排思想

    def quick_sort(alist, start, end):
        if start >= end:
            return
        mid = alist[start]
        left = start
        right = end
        # left与right未重合,就向中间移动
        while left < right:
            while left < right and alist[right] >= mid:
                right -= 1
            alist[left] = alist[right]
            while left < right and alist[left] < mid:
                left += 1  # a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
            alist[right] = alist[left]
        # 从循环退出后,left与right相遇,即left==right
        alist[left] = mid
        # 对左边部分执行快速排序
        quick_sort(alist, start, left-1)
        # 对右边部分执行快速排序
        quick_sort(alist, left+1, end)
    
    
    a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
    quick_sort(a_list, 0, len(a_list) - 1)
    print(a_list)

    输出结果时,我发现这种方法直接改变了原有列表(使用的Python3.6)

    使用列表推导式和快速排序的递归思想,实现快排:

    def qucik_sort(alist):
        if len(alist) <= 1:
            return alist
        return qucik_sort([i for i in alist[1:] if i < alist[0]]) + alist[0:1] + qucik_sort([i for i in alist[1:] if i >= alist[0]])
    
    
    ls = [22, 21, 34, 65, 12, 89, 3, 9, 66]
    print(qucik_sort(ls))
    print(ls)

    理解快速排序思想之后,这个方法,使用的代码非常少

    而且该方法不改变原有的列表

  • 相关阅读:
    常用工具
    H5页面验收流程及性能验收标准
    埋点数据测试
    提高效率的必备工具
    移动APP安全测试
    Response响应相关
    AES加密解密
    Requests模块
    爬虫入门
    【CMDB】API传输验证
  • 原文地址:https://www.cnblogs.com/shenzhuang/p/10368345.html
Copyright © 2011-2022 走看看