• 经典算法之快速排序(Quick Sort)-Python实现


    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

    步骤为:

    1. 挑选基准值:从数列中挑出一个元素,称为“基准”(pivot),
    2. 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成,
    3. 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序

    Python 代码实现

    import random
    
    
    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
    
    
    if __name__ == '__main__':
        # arr = [random.randint(0, 100) for _ in range(10)]
        arr = [56, 21, 75, 93, 39, 55, 34, 42, 81, 30]
        print("origin", arr)
        quick_sort(arr, 0, len(arr) - 1)
        print("result", arr)
    

      

    本博客的内容如果没有标注转载字样,均属个人原创!欢迎学习交流,如果觉得有价值,欢迎转载,转载请注明出处,谢谢!
  • 相关阅读:
    【51nod1965】奇怪的式子
    【spoj】DIVCNTK
    【bzoj3173】最长上升子序列
    【UOJ 209】【UER #6】票数统计
    Fib数列2 费马小定理+矩阵乘法
    T37302 P哥的桶
    U32592 摘果实
    【loj6029】「雅礼集训 2017 Day1」市场&&【uoj#228】基础数据结构练习题
    【bzoj4631】踩气球 线段树
    [bzoj4922]Karp-de-Chant Number
  • 原文地址:https://www.cnblogs.com/L-O-N/p/14541807.html
Copyright © 2020-2023  润新知