码迷,mamicode.com
首页 > 编程语言 > 详细

【Python实现快排】 𱛡

时间:2019-08-18 21:48:17      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:font   while   ref   单例模式   quicksort   partition   value   结束   sort   

原文: http://blog.gqylpy.com/gqy/342

"
挖坑法思路:

  • 取一个元素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://blog.gqylpy.com/gqy/342

【Python实现快排】 𱛡

标签:font   while   ref   单例模式   quicksort   partition   value   结束   sort   

原文地址:https://www.cnblogs.com/gqy02/p/11373756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!