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