快速排序的非尾递归python实现
快速排序的时间复杂度为O(n log(n))
,可以用这种办法来记忆算法:
将当前排列的数字中选出一个数字(例如第一个)为基准flag, 剩下的数字分为两组, 比flag大的, 比flag小的(这部分时间复杂度为O(n)
), 分在flag两边. 再对这两边执行同样操作(这部分时间复杂度为O(n log(n))
)[因为采用了二分法]
需要注意的是何时可以结束递归: 排列的长度为0, 1时都可以, 这里要仔细分析
代码实现
def qsort (L):
if len(L):
l_min = [x for x in L[1:] if x < L[0]]
l_max = [x for x in L[1:] if x >= L[0]]
return qsort(l_min) + [L[0]] + qsort(l_max)
else:
return []