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)

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

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

posted @ 2019-02-13 10:10  榴莲丿丶  阅读(3404)  评论(0编辑  收藏  举报