这些奇葩的排序算法绝对让你大开眼界,还带动图的!

举报
Tom forever 发表于 2019/10/26 11:01:52 2019/10/26
【摘要】 如果有人问你哪种排序算法是你最喜欢的,可能你会偏爱简单的冒泡排序,也有可能会选择具备分治思想的快速排序或者归并排序。但如果有人问你你所见过哪些奇葩的算法时,你的回答会是什么?下面,我就将网上脑洞大开的一些奇葩算法画出来,以飨读者。睡眠排序好像写这个排序的人,已经被老板开除了,但是他火了。根据CPU的调度算法实现的,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的10倍...

如果有人问你哪种排序算法是你最喜欢的,可能你会偏爱简单的冒泡排序,也有可能会选择具备分治思想的快速排序或者归并排序。


但如果有人问你你所见过哪些奇葩的算法时,你的回答会是什么?下面,我就将网上脑洞大开的一些奇葩算法画出来,以飨读者。

睡眠排序


好像写这个排序的人,已经被老板开除了,但是他火了。根据CPU的调度算法实现的,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的10倍再加10,不是睡眠和它的数值一样大的原因是,当数值太小时,误差太大,睡眠的时间不比输出的时间少,那么就会存在不正确的输出结果


640?tp=webp&wxfrom=5&wx_lazy=1

猴子排序


这是谁想出来的,我保证不打死他。随机打乱数组,检查是否排好序,若是,则输出,否则再次打乱,再检查…最佳情况O(n),平均O(n*n!),最坏可执行直到世界的尽头。。


640?tp=webp&wxfrom=5&wx_lazy=1


一个有趣的理论:一只猴子随机敲打打字机键盘,如果时间足够长,总是能打出特定的文本,比如莎士比亚全集。^_^


面条排序


虽然我不喜欢吃面条,但我最服的就是这个脑洞。找到数组中最大和最小的两个数(O(n)),让最大的数对应一根很长的面条,最小的数对应一根很短的面条。


这里的数与面条长度的对应可以用一个严格递增的函数来映射。重新遍历数组,每遇到一个数,就取一根面条,把它切成这个数对应的长度,可以得到n根面条。


接下来,一手握住这n根面条,稍微用力,别握太紧,在平放的桌面上直立着放下,让所有的面条底端接触到桌面。另一只手平行于桌面,从面条上方缓慢往下移动,每当这只手碰到一根面条,移走它,并把对应的数输出到结果数组中,直到移走全部面条。


640?tp=webp&wxfrom=5&wx_lazy=1


除此之外,你们还见过哪些奇葩的排序算法?




转载声明:本文转载自公众号【程序员私房菜】。    

原文链接:https://mp.weixin.qq.com/s/pi-0oD2iY4Fv_hquuCe2kA


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。