睡眠排序,也称为硬件排序,是一种充分利用硬件计时器的资源来实现的拟态算法。

JavaScript 中,基本原理就是通过设置多个计时器(setTimeout),每个计时器的唤醒时间与数组各项的值各相对应。计时器唤醒时,便执行对应值的输出,最终完成对数组的排序。

const sleepSort = (arr) => {// 确定输入数组的长度const length = arr.length// 设置时间间隔基数const n = 1// 结果数组const result = []// 对数组进行遍历arr.forEach(i => {// 设置当前值对应的时间间隔const timeout = i * nsetTimeout(() => {result.push(i)   // 判定定时器是否已经全部完成,完成则输出结果if (result.length === length) {console.log('===== result =====')console.log(result)}}, timeout)})
}

以上,是我个人看完睡眠排序基本原理后,自己写出来的一个个简单的测试函数。

为了测试这个睡眠排序的函数,就需要一个数量不可确定的随机数组,于是,便有写了另一个函数,用来生成随机数组:

const random = (n) => {const res = []while (n > 0) {res.push(Math.floor(Math.random() * 50))n -= 1}return res
}

到此,准备工作完毕。

开始各种造(测试)了。

// 生成随机数组
const arr = random(50)
// 测试
sleepSort(arr)

经过测试,在数据量相对较少的情况下,睡眠排序看起来确实是一种相对简单的排序方案。在一定程度上,睡眠排序与选择排序有些相似,都是通过创建一个新的数组,然后将原数组的数据按顺序插入新数组,最后输出结果数组。但是,睡眠排序不需要手动的去做各个值之间的对比,而是通过计时器不同的唤醒时间来实现值的插入。

但是,也是在测试过程中,发现了一个比较明显的问题:如果为了降低整个排序的耗时而将时间间隔基数设置为 1 时,那么如果此时数组中同时存在 0 和 1 这两个数,就常常会出现 0 和 1 排序错误的情况。

此外,也可以舍弃 if 语句,而是多加上一个计时器,来做总的结果的一个输出:

const sleepSort = (arr) => {let maxTime = 0const n = 1const result = []arr.forEach(i => {const timeout = i * nmaxTime = Math.max(maxTime, timeout)setTimeout(() => {result.push(i)   }, timeout)})setTimeout(() => {console.log(result)}, maxTime + n)
}

这个方案里,添加了一个最大时间的参数,用于确定输出时间。

关于睡眠排序的小尝试相关推荐

  1. Java排序 - 不实用的几个排序算法 -- 睡眠排序、猴子排序、面条排序、珠排序...

    介绍几个不实用的排序算法,一来可以在学习时增加一些乐趣,放松一下自己,二来可以学习一下.思考一下这些算法失败在哪里,又是否存在一些好的地方? 睡眠排序 这是一个思想比较简单,脑洞巨大的算法 -- 我们 ...

  2. 睡眠排序(纯纯搞笑)

    该方法纯属搞笑,切勿当真 睡眠排序:一组int型数组,无负数,用一种方式排序. 方法描述:假设一个数组有n个数据,我们就造n个线程,让每个线程sleep对应数据的时间,再进行输出. public cl ...

  3. 伪睡眠排序(c++实现)

    相信大家最近都被某位天才(bushi 写的睡眠排序刷屏了 我到想不明白这世界上怎么还有这种** 但是其实在特定环境下,睡眠排序的时间复杂度要小于冒泡sort不香是咋的 原理来说,就是给每个数字开一个进 ...

  4. 排序算法--睡眠排序

    我们学数据结构的时候会学到多种排序算法,基本上都是基于比较的排序,下面的这个排序算法并不是基于比较,确切的说它是基于cpu调度算法实现的,这个算法的作者称之为--睡眠排序. 它的基本思想是,对一组数据 ...

  5. C语言最简单的sleep sort睡眠排序实现(附完整源码)

    C语言最简单的sleep sort睡眠排序实现 C语言最简单的sleep sort睡眠排序实现完整源码(定义,实现,main函数测试) C语言最简单的sleep sort睡眠排序实现完整源码(定义,实 ...

  6. # 睡眠3秒_【for fun】睡眠排序算法

    点击上方蓝字关注我,我们一起学编程有任何疑问或者想看的内容,欢迎私信 前天我们一起看了猴子排序,今天我们再来看一个奇葩的排序方法:睡眠排序. 所谓睡眠排序,就是为待排序数组的每一个元素 x 启动一个线 ...

  7. 【Java】睡眠排序

    写这个东西的缘由 这是一个羞耻度爆表的排序,那天跟朋友开玩笑,能不能用线程休眠操纵排序,朋友楞了一下,说还真有...我傻了,突然想想好像真有,就是这个睡眠排序. 最后长叹一口气,设计者脑洞真大... ...

  8. 睡眠排序法-objective C版的代码

    将开发过程比较重要的代码做个珍藏,下面代码内容是关于睡眠排序法-objective C版的代码,应该能对各位朋友有帮助. @interface NSArray (SleepSort) - (void) ...

  9. SubstanceDesigner制作PBR材质制作并且同步到Unity小尝试

    SubstanceDesigner制作PBR材质制作并且同步到Unity小尝试 1.下载安装SubstanceDesigner,网址:https://zixue.3d66.com/softhtml/d ...

最新文章

  1. python windows epoll_Windows 10生产力提升之WSL实践
  2. centos7 更新源 安装ifconfig
  3. 根据传入url请求,返回json字符串
  4. reddit高赞资源:20h系统性深度学习强化学习课程,视频、PPT、代码全都有 | 免费...
  5. Pat乙级 1049 数列的片段和
  6. python文本解析_Python之文本文件解析
  7. raspberry pi_通过串行蓝牙从Raspberry Pi传感器单元发送数据
  8. 使用腾讯云提供的针对Nuget包管理器的缓存加速服务
  9. 混合精度训练amp,torch.cuda.amp.autocast():
  10. 使用香浓熵实现DNS Tunnel检测
  11. onSaveInstanceState() 和 onRestoreInstanceState()
  12. 【黑马程序员】————预处理指令2-文件编译
  13. 【概率论】深度学习必懂的13种概率分布
  14. 雷达发现 |最新教育行业数据报告
  15. mysql中Mysql模糊查询like效率,以及更高效的写法和sql优化方法
  16. 0基础学习3dmax游戏建模有这4个技巧
  17. MT6573 1048MP 版本发布(笔记)
  18. 007 锁存器和触发器
  19. 成品直播源码推荐,登录和注册两个页面的简单实现
  20. 微信小程序开发者工具-使用技巧(更新中~)

热门文章

  1. 《人力资源管理》课程要点
  2. 当千元机遇上GPU Turbo,红海市场会再起波澜吗?
  3. 以信息化来提升应急无线电管理
  4. Text Control DS Server创建Adobe PDF文档
  5. 安卓手机抓包-安装证书fidder抓包
  6. ACM-ICPC之路
  7. Unity射线检测的用法总结
  8. 项目数据表中的并发控制机制之version
  9. 【转载】模仿国内知名B2C网站,实现的一个分布式B2C商城 使用Spring Cloud
  10. python实现找100以内质数