• 快速排序


     1 '''
     2 原理
     3 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
     4 
     5 步骤
     6 1 从数列中挑出一个元素,称为”基准”(pivot),
     7 2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
     8     在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
     9 3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
    10 '''
    11 
    12 #普通版   这个普通版代码是我找到的最容易读懂的
    13 def quick_sort(list):
    14     less = []
    15     pivotList = []
    16     more = []
    17     # 递归出口
    18     if len(list) <= 1:
    19         return list
    20     else:
    21         # 将第一个值做为基准
    22         pivot = list[0]
    23         
    24         for i in list:
    25             # 将比急转小的值放到less数列
    26             if i < pivot:
    27                 less.append(i)
    28                 
    29             # 将比基准大的值放到more数列
    30             elif i > pivot:
    31                 more.append(i)
    32                 
    33             # 将和基准相同的值保存在基准数列
    34             else:
    35                 pivotList.append(i)
    36                 
    37         # 对less数列和more数列继续进行排序
    38         less = quick_sort(less)
    39         more = quick_sort(more)
    40         
    41         return less + pivotList + more
    42 
    43 
    44 
    45 #三行代码实现快速排序版本
    46 def qsort(arr):
    47     if len(arr) <= 1:
    48         return arr
    49     else:
    50         pivot = arr[0]
    51         return qsort([x for x in arr[1:] if x < pivot]) + 
    52                [pivot] + 
    53                qsort([x for x in arr[1:] if x >= pivot])
  • 相关阅读:
    extract numberic from text
    str.rfind("//")
    solr入门心得
    深挖洞,广积粮,缓称王
    ubuntu 查看文件夹大小

    关于托运
    iconv转换文件编码
    小毛小毛你的心态
    广积粮,高筑墙,缓称王
  • 原文地址:https://www.cnblogs.com/avention/p/8953515.html
Copyright © 2020-2023  润新知