今天看到一个名为《一些因愚蠢而成名的代码》,其中提到了2个排序算法,个人觉得挺有趣的,至于是否“愚蠢”……
下面看第一个排序算法(蓝色背景部分为原文引用):
Bogosort 是一个非常著名的列表排序算法,它是这样的实现原理:
|
个人观点:
暂且不论算法好坏,这个算法的思想本身就很有趣了。我们看到,算法的目的是使列表有序,但算法的操作步骤没有一个是向它的目的趋近的。而且,恰恰相反,算法使用了反向思维——以打乱顺序的方式来“排序”——算法成功排序的保障完全依赖于概率。这仿佛很有哲理,背道而驰未必达不到目的地!
再看另一个排序算法(蓝色背景部分为原文引用):
睡眠排序:这是一个在 4chan 上走红的非常简单的代码,它是愚蠢还是巧妙,取决于你怎么来看待它。它背后的逻辑非常简单,下面的它的伪代码: procedure printNumber(n) sleep n seconds print n end for arg in args run printNumber(arg) in background end wait for all processes to finish 它会为数组中的每一个整数创建一个线程,然后放到后台运行。线程会等待 N 秒然后打印该整数。这意味着最小的数等待时间最短,并最先被打印出来,最大的数等待时间最长并最后打印出来。 换句话说,如果有一个 1 到 20 的数组,随机排序,1 的线程会等待 1 秒,2 的会等待 2秒,依此类推。最终,就会得到排好序的数组。这是一个非常滑稽但却很有效的算法,但目前并没有得到很好的证明,因为它需要硬件的支持。 |
个人观点:
我去!这个排序算法的时间复杂度貌似竟然不依赖排序元素个数,而取决于最大的数是多少,而且几乎所有运行时间都在……sleep。另外,这算法的“美妙”之处在于,它的存在使得线程的 sleep 就好像是为排序而生的一样(^_^)。
浙公网安备 33010602011771号