首页 > 编程语言 > 详细

[算法] 快速排序

时间:2020-01-10 10:18:34      阅读:82      评论:0      收藏:0      [点我收藏+]
# 快速排序递归玩法
def quicksort(arr):
    # 结束条件
    if len(arr) <= 1:
        return arr
    # 用中间值更稳定
    middle = arr[len(arr) // 2]
    # 记得将middle拿出来,最后再放到中间
    del arr[len(arr) // 2]
    # 利用列表生成式,100W数据,2.9s
    # left = [x for x in arr if x <= middle]
    # right = [x for x in arr if x > middle]

    # 2.6s
    left = []
    right = []
    for x in arr:
        left.append(x) if x <= middle else right.append(x)

    # 记得把middle放中间
    return quicksort(left) + [middle] + quicksort(right)


# 非递归玩法
def quicksort2(arr):
    ‘‘‘
    模拟栈操作实现非递归的快速排序
    ‘‘‘
    if len(arr) < 2:
        return arr
    stack = []
    stack.append(len(arr) - 1)
    stack.append(0)
    while stack:
        l = stack.pop()
        r = stack.pop()
        index = partition(arr, l, r)
        if l < index - 1:
            stack.append(index - 1)
            stack.append(l)
        if r > index + 1:
            stack.append(r)
            stack.append(index + 1)


def partition(arr, start, end):
    # 分区操作,返回基准线下标
    pivot = arr[start]
    while start < end:
        while start < end and arr[end] >= pivot:
            end -= 1
        arr[start] = arr[end]
        while start < end and arr[start] <= pivot:
            start += 1
        arr[end] = arr[start]
    # 此时start = end
    arr[start] = pivot
    return start


if __name__ == __main__:
    li = list(range(1000000))
    import random

    random.shuffle(li)
    sorted = quicksort(li)
    print(sorted[:10])

 

快速排序。

[算法] 快速排序

原文:https://www.cnblogs.com/leokale-zz/p/12174207.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!