快速排序

 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])

 

posted @ 2018-04-26 16:51  Avention  阅读(178)  评论(0编辑  收藏  举报