奇葩算法之睡眠排序

今天了解了一个有意思的排序算法,叫做睡眠排序,排序思路是:遍历整个数组,然后让它“睡”相应时间的,等它睡醒了再将它放入结果数组,js 实现代码如下:

let arr = [3,2,5,4,7,6,1]
let res = []
let timers= [];
for(let i=0;i<arr.length;i++){
  timers.push(setTimeout(()=>{ res.push(arr[i]) },arr[i]/10000))
}
Promise.all(timers).then(res=>{
  console.log(res)   // [1,2,3,4,5,6,7]
})

在这个代码里面,首先,我们准备了两个数组,res 和 timers,res就是我们的最后排序后的数组,timers用于放置定时器函数,用于 Promise.All 确保所有的定时器函数都已经执行完毕。我们将数组遍历一遍,然后将数组的每一项的值作为定时器的时间,定时器做的操作就是将该值push进数组,最后等所有的异步操作执行完毕,res自然就排序完成了;

这个算法有一个问题,就是 不能排序负值,虽然可以每个数据加上一个绝对值最大的负数作为偏移量,但是那还得找出那个数,麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值