快速排序是一种常用的排序算法,比选择排序快得多。快速排序也用上了之前讲的 D&C 方法。
下面将使用快速排序对包含一系列数字元素的数组进行排序。
def quickSort(array):
if len(array) < 2: # 基线条件
return array
这里只是进行了分区,得到的两个子数组还是无序的。如果这两个子数组都是有序的话,将会非常容易得到排序结果。此时排序方法为:左边的数组 [10, 15] + 基准值 [33] + 右边的数组 [ ],得到最终结果为:[10, 15, 33]。但是如何对两个子数组进行排序呢?此时可以发现递归调用快速排序方法,就可以快速知道结果。
quickSort([15, 10]) + [33] + quickSort([ ])
> [10, 15, 33]
综上,对 3 个元素的数组进行快速排序的步骤如下: (1)选择基准值 (2)将数组分为两个子数组:小于基准值的数组和大于基准值的数组 (3)对这两个子数组进行快速排序
def quickSort(array):
if len(array) < 2:
return array
else:
pivot = array[0]
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
return quickSort(less) + [pivot] + quickSort(greater)
-------------------------------------------------------------
>>> quickSort([33, 15, 10])
[10, 15, 33]