快速排序:
通过基准值将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准值要小,另外一部分的所有数据都比基准值要大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此类推,使整个数据变成有序序列。
快速排序的速度取决于选择的基准值,有序序列中选择第一个值作为基准值是最糟情况O(n),基准值选取优先级:三数取中 > 随机基准 > 固定基准。
使用分而治之divide and conquer(D&C)策略,必须有基准值。
示例:三数取中,取中间数为基准值
from random import choice
def quickSort(arr):
length = len(arr)
if length < 2: #基线条件,空列表或1个值的列表
return arr
else: #递归条件(归纳条件,归纳证明)
index = length//2 #中间数索引
start = arr[0] #第一个元素
mid = arr[index] #最中间一个元素
end = arr[length-1] #最后一个元素
#判断三数的中值,作为基准值
if end <= start and end <= mid: #如果最后一个元素最小
pivot = min(start, mid) #获取前两个元素中小的那个
else: #如果最后一个元素不是最小
pivot = min(max(start, mi