zoukankan      html  css  js  c++  java
  • Python 排序算法之快速排序

    """
    快速排序
    分治法(divide and conquer),三步走
    1. Partition:选择一个基准(pivot)分割列表为两个子列表,小于基准和大于基准,
        基准数通常选择第一个或最后一个元素
    2. 对两个子列表分别快排,调用自身
    3. 合并结果,两个子列表和只包含基准数的列表
    """
    
    
    def quicksort(array):
        len0 = len(array)
        if len0 < 2:
            return array
        pivot_index = len0-1  # 选择最后一个元素作为基准
        pivot = array[pivot_index]
        less_part = [
            i for i in array[:-1] if i <= pivot
        ]
        great_part = [
            i for i in array[:-1] if i > pivot
        ]
        return quicksort(less_part) + [pivot] + quicksort(great_part)
    
    
    def test_quicksort():
        import random
        ll = list(range(10))
        random.shuffle(ll)
        print(ll)
        print('-----------')
        print(quicksort(ll))
        assert quicksort(ll) == sorted(ll)
    
    
    test_quicksort()
    
  • 相关阅读:
    2016CCPC长春
    POJ 3974
    CH 1401
    POJ 1426
    hihocoder 1829
    江南OJ 1151
    POJ 3279
    POJ 3349
    POJ 3278
    ZOJ 3983
  • 原文地址:https://www.cnblogs.com/jiaoran/p/14584136.html
Copyright © 2011-2022 走看看