Python实现快排 -- 2019-08-09 12:12:36

Posted gqy02

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python实现快排 -- 2019-08-09 12:12:36相关的知识,希望对你有一定的参考价值。

原文: http://106.13.73.98/__/117/

挖坑法思路:

  • 取一个元素p(第一个元素),使元素p归位;
  • 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p;
  • 递归完成排序。

Python代码示例:

lst = [5, 7, 4, 3, 1, 2, 9, 8]


def quick_sort(d, l, r):
    if l < r:
        m = partition(d, l, r)
        quick_sort(d, l, m - 1)
        quick_sort(d, m + 1, r)


def partition(d, l, r):
    # 挖坑法,函数执行结束后,左边的数一定不大于p,右边的数一定不小于p
    p = d[l]
    while l < r:
        while l < r and d[r] >= p:
            r -= 1
        d[l] = d[r]
        while l < r and d[l] <= p:
            l += 1
        d[r] = d[l]
    d[l] = p
    return l


quick_sort(lst, 0, len(lst) - 1)




《算法导论》中的快速排序:

class QuickSort(object):
    __INSTANCE = None

    def __new__(cls, *args, **kwargs):
        """单例模式"""
        if not cls.__INSTANCE:
            cls.__INSTANCE = object.__new__(cls)
        return cls.__INSTANCE

    def __init__(self, data):
        self.__quick_sort(data, 0, len(data) - 1)

    def __quick_sort(self, d, l, r):
        if l < r:
            q = self.__partition(d, l, r)
            self.__quick_sort(d, l, q - 1)
            self.__quick_sort(d, q + 1, r)

    def __partition(self, d, l, r):
        x = d[r]  # last value
        i = l - 1  # last index
        for j in range(l, r):
            if d[j] <= x:
                i += 1
                d[i], d[j] = d[j], d[i]
        d[i + 1], d[r] = d[r], d[i + 1]
        return i + 1


QuickSort(lst)

原文: http://106.13.73.98/__/117/

以上是关于Python实现快排 -- 2019-08-09 12:12:36的主要内容,如果未能解决你的问题,请参考以下文章

快排用Python的实现 - 简洁方式

python实现快排算法(quicksort)

Python实现快排 𱛡

python code practice: 快排归并堆排的实现,双指针/滑动窗口技术

Python的快排应有的样子

Python简单的实现快速排序