如果有人问你哪种排序算法是你最喜欢的,可能你会偏爱简单的冒泡排序,也有可能会选择具备分治思想的快速排序或者归并排序。
但如果有人问你你所见过哪些奇葩的算法时,你的回答会是什么?
下面,我就将网上脑洞大开的一些奇葩算法画出来,以飨读者。
根据 CPU 的调度算法实现的,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的 10 倍再加 10,不是睡眠和它的数值一样大的原因是,当数值太小时,误差太大,睡眠的时间不比输出的时间少,那么就会存在不正确的输出结果。
随机打乱数组,检查是否排好序,若是,则输出,否则再次打乱,再检查...最佳情况 O(n),平均 O(n*n!),最坏可执行直到世界的尽头。
一个有趣的理论:一只猴子随机敲打打字机键盘,如果时间足够长,总是能打出特定的文本,比如莎士比亚全集。^_^
首先去买一捆面条,我喜欢手擀面。找到数组中最大和最小的两个数(O(n)),让最大的数对应一根很长的面条,最小的数对应一根很短的面条。
重新遍历数组,每遇到一个数,就取一根面条,把它切成这个数对应的长度,可以得到 n 根面条。
这里的数与面条长度的对应可以用一个严格递增的函数来映射。
接下来,一手握住这 n 根面条,稍微用力,别握太紧,在平放的桌面上直立着放下,让所有的面条底端接触到桌面。另一只手平行于桌面,从面条上方缓慢往下移动,每当这只手碰到一根面条,移走它,并把对应的数输出到结果数组中,直到移走全部面条。
你还见过哪些奇葩的排序^_^
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.