突然想起来前段时间看《算法图解》的时候 get 到的新知识——快排,当然这个知识应该不会有程序员不知道吧?书里给出的 python 代码非常的简洁,于是我利用 Python 的特性,进一步简化改写,最终给出了一个一行完成的快排实现,如下:
def qsort(array):
return array if len(array)<2 else qsort([x for x in array[1:] if x < array[0]]) + [array[0]] + qsort([x for x in array[1:] if x >= array[0]])
简单讲解一下思路:
如果 array 只有 0 个或者 1 个元素,那么直接返回,否则递归返回三个 list 的拼接:
第一个 list 为小于 array[0]
的元素,第二个数组为 array[0]
本身,第三个数组为大于 array[0]
的元素,这即为快排的基本思想。当然选择 list 的第一个元素作为基准并非为快排的最优策略,不过也是一种比较常见的办法。