zoukankan      html  css  js  c++  java
  • 快速排序

     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])
  • 相关阅读:
    poj 3320 Jessica's Reading Problem
    uva 120 C
    vim使用教程-转自
    2015 俄罗斯网络赛 D. Boulevard
    HTML转义字符大全
    介绍个好点的,JAVA技术群
    JAVA学习路线
    linux常用命令大全(转)好东西要分享
    Jqprint 轻量级页面打印插件
    hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/avention/p/8953515.html
Copyright © 2011-2022 走看看