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)

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

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

  • 相关阅读:
    multi-task learning
    代码杂谈-python函数
    代码杂谈-or符号
    安装maven
    zsh
    mint linux的几个问题
    [软件] Omnigraffle
    无梯度优化算法
    根据pdf文件获取标题等信息
    计算广告-GD广告
  • 原文地址:https://www.cnblogs.com/shenzhuang/p/10368345.html
Copyright © 2011-2022 走看看