快速排序,采用分而治之的策略,在数组里找一个基准值,遍历数组,小于基准值的,放到less数组中,大于基准值的放到greater数组中,将原来的数组,不断的分成小的数组,直到数组只剩下一个元素,即:
存在数组array = [5, 1, 3, 4, 2]
选择基准值array[0], 因为数组元素会不断变少,基准值也在不断变化,所以选择相对值[0],
第一次分组:less=[1, 3, 4, 2], pivot=5, greater=[]
第二次分组:less=[], pivot=1, greater=[3, 4, 2],
第三次分组: less=[2], pivot=3, greater=[4], 此时,所有数组元素个数都等于1,输出[1, 2, 3, 4, 5]
上面实际上的排序如下:
一、[1, 3, 4, 2],5
二、1,[3, 4, 2], 5
三、1,2, 3, 4, 5
代码如下:
def quick_sort(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 quick_sort(less) + [pivot] + quick_sort(greater)
print(quick_sort([1, 3, 6, 1, 2, 9, 44, 4, 2, 6, 4, 8]))