V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CoderOnePolo
V2EX  ›  推广

这些奇葩的排序算法,你没见过动画吧?

  •  
  •   CoderOnePolo · 2018-12-04 08:45:47 +08:00 · 3146 次点击
    这是一个创建于 2188 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    但如果有人问你你所见过哪些奇葩的算法时,你的回答会是什么?

    下面,我就将网上脑洞大开的一些奇葩算法画出来,以飨读者。

    睡眠排序

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

    猴子排序

    随机打乱数组,检查是否排好序,若是,则输出,否则再次打乱,再检查...最佳情况 O(n),平均 O(n*n!),最坏可执行直到世界的尽头。

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

    面条排序

    首先去买一捆面条,我喜欢手擀面。找到数组中最大和最小的两个数(O(n)),让最大的数对应一根很长的面条,最小的数对应一根很短的面条。
    重新遍历数组,每遇到一个数,就取一根面条,把它切成这个数对应的长度,可以得到 n 根面条。
    这里的数与面条长度的对应可以用一个严格递增的函数来映射。
    接下来,一手握住这 n 根面条,稍微用力,别握太紧,在平放的桌面上直立着放下,让所有的面条底端接触到桌面。另一只手平行于桌面,从面条上方缓慢往下移动,每当这只手碰到一根面条,移走它,并把对应的数输出到结果数组中,直到移走全部面条。

    你还见过哪些奇葩的排序^_^

    10 条回复    2018-12-04 17:17:26 +08:00
    looseChen
        1
    looseChen  
       2018-12-04 09:08:20 +08:00   ❤️ 1
    有点意识
    nekoneko
        2
    nekoneko  
       2018-12-04 09:11:35 +08:00   ❤️ 2
    1.我认为一个数组有序
    2.把所有认为这个数组无序的人都杀了
    3.这个数组有序了
    cincout
        3
    cincout  
       2018-12-04 09:27:56 +08:00   ❤️ 1
    @nekoneko #2 杠一下哈哈.
    //我不这么认为, 有序或者无序只是人们形容这种现象的名词, 而无序这种行为, 就算所有的人都认为它是有序的, 它本身的现象是和世界所颠倒的. 除非世界的规则将无序认为是有序,那它对于人们来说才是真的有序.
    CoderOnePolo
        4
    CoderOnePolo  
    OP
       2018-12-04 09:32:47 +08:00
    @nekoneko
    @cincout 可以把它叫做 指鹿为马 排序^_^
    nekoneko
        5
    nekoneko  
       2018-12-04 09:33:18 +08:00
    @cincout 针对人类认知,给你举个栗子,8,0,1 有序吗,按照数字排序是无序的,但如我我按照哪个数字圈多排序呢,那它就是有序的,有序无序只是相对人类来说的,大自然没有这个概念
    noli
        6
    noli  
       2018-12-04 09:51:59 +08:00   ❤️ 1
    @nekoneko

    你的这种说法只是把规律是否可感知的问题,转换成了存在性问题——当然也不能说你的说法完全是错的。毕竟数学是先验的还是后天的,确实是一个很值得争论的哲学问题。
    但是序列在大自然中显然是存在的,譬如花瓣的数量与斐波那契螺旋线,和斐波那契数列,显然有关系,显然存在序列。
    csshoo
        7
    csshoo  
       2018-12-04 10:32:50 +08:00   ❤️ 1
    @nekoneko 不能解决问题,就解决提出问题的人,这思路在哪见过 [滑稽]
    weiqi1992
        8
    weiqi1992  
       2018-12-04 11:19:50 +08:00
    @csshoo 刘。。刘海屏?
    ZRS
        9
    ZRS  
       2018-12-04 11:58:29 +08:00 via iPhone
    最后那个应该是珠排序
    cyspy
        10
    cyspy  
       2018-12-04 17:17:26 +08:00
    @nekoneko 应该可以用熵来解释,801 这样的序列熵相对来说可能还挺大,如果长起来,88880099009111 熵就比较小了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:38 · PVG 08:38 · LAX 16:38 · JFK 19:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.