快速排序

作者: momo1023 | 来源:发表于2018-09-12 16:15 被阅读7次

    python版本快速排序:

    1. 简洁版递归:

    quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])
    

    2. 常见版本:

    def quick_sort(array, left, right):
        if left >= right:
            return
        low = left
        high = right
        key = array[low]
        while left < right:
            while left < right and array[right] > key:
                right -= 1
            array[left] = array[right]
            while left < right and array[left] <= key:
                left += 1
            array[right] = array[left]
        array[right] = key
        quick_sort(array, low, left - 1)
        quick_sort(array, left + 1, high)
    

    3. 算法导论版:

    def quick_sort(array, l, r):
        if l < r:
            q = partition(array, l, r)
            quick_sort(array, l, q - 1)
            quick_sort(array, q + 1, r)
     
    def partition(array, l, r):
        x = array[r]
        i = l - 1
        for j in range(l, r):
            if array[j] <= x:
                i += 1
                array[i], array[j] = array[j], array[i]
        array[i + 1], array[r] = array[r], array[i+1]
        return i + 1
    

    4. 非递归版:

    def quick_sort(array, l, r):
        if l >= r:
            return
        stack = []
        stack.append(l)
        stack.append(r)
        while stack:
            low = stack.pop(0)
            high = stack.pop(0)
            if high - low <= 0:
                continue
            x = array[high]
            i = low - 1
            for j in range(low, high):
                if array[j] <= x:
                    i += 1
                    array[i], array[j] = array[j], array[i]
            array[i + 1], array[high] = array[high], array[i + 1]
            stack.extend([low, i, i + 2, high])
    

    相关文章

      网友评论

        本文标题:快速排序

        本文链接:https://www.haomeiwen.com/subject/vyavgftx.html