突然想起来前段时间看《算法图解》的时候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 的第一个元素作为基准并非为快排的最优策略,不过也是一种比较常见的办法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。