zoukankan      html  css  js  c++  java
  • 经典算法之快速排序(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)
    

      

    本博客的内容如果没有标注转载字样,均属个人原创!欢迎学习交流,如果觉得有价值,欢迎转载,转载请注明出处,谢谢!
  • 相关阅读:
    全排列算法的全面解析
    排序算法系列:插入排序算法
    MySQL多表查询核心优化
    Python代码优化及技巧笔记(二)
    深入理解Lambda
    Unity游戏逻辑服务器实践
    Java设计模式——迭代器模式
    Java设计模式——原型模式
    insert 加的锁
    区间锁
  • 原文地址:https://www.cnblogs.com/L-O-N/p/14541807.html
Copyright © 2011-2022 走看看