微博上知道了《啊哈,C》这本书,听说作者即将出版《啊哈,算法》。我也来凑个热闹。 邀请各位高手,通俗地介绍您的最美算法。
先看代码吧,本来可以写成一行,我觉得换行写可读性好些。
def qs a
(pivot = a.pop) ?
qs(a.select{|i| i <= pivot}) + [pivot] + qs(a.select{|i| i > pivot}) :
[]
end
#test
x = (1..10).to_a.shuffle
p x
p qs x
通俗地说,快排的故事是这样的:
话说一组胖子,长官要求按照体重排序,且看他如何做。第一位名叫张跑,貌似张飞,长官一声令下张跑出列,张跑差不多 220 斤。接下来长官要求张跑居中,比他轻的站左边,重的站右边。只见大部分都站到了左边,右边的不多几个。
代码中的 pivot 就是张跑。
接下来就是左右两组,重复这个过程,计算机术语叫递归。
快排算法好在快,也容易理解。Ruby 代码的可读性也很好。
这个算法的发明者是一个科学家,曾经获得图灵奖