zoukankan      html  css  js  c++  java
  • 这些奇葩的排序算法,你没见过动画吧?

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

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

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

    睡眠排序

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

    imageimage

    猴子排序

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

    imageimage

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

    面条排序

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

    imageimage

    你们还见过哪些奇葩的排序算法,来公众号 五分钟学算法 留言说说吧~

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/fivestudy/p/10068957.html
Copyright © 2011-2022 走看看