睡眠排序算法 睡眠排序算法是⼀种⽐较另类有趣的排序算法,其核⼼思想与CPU调度机制相关,是通过多线程让每⼀个数据元素睡眠⼀定规律的时间,睡眠时间要和⾃⾝数据⼤⼩存在⼀定的规律,睡眠时间短的先进⾏输出,睡眠长的后输出,从⽽实现数据有序输出。存在缺点: ①若睡眠时间之间相差很...
1. 睡眠排序(Sleep Sort) 构造n个线程,它们和这n个数一一对应。初始化后,线程们开始睡眠,等到对应的数那么多个时间单位后各自醒来,然后输出它对应的数。这样最小的数对应的线程最早醒来,这个数最早被输出。等所有线程都醒来,排序就结束了。能脑洞大开想出此算法的,绝壁天才啊。。。 注释:[1] 当线程不太多的...
睡眠排序就遇到一个数就把一个数放到一个线程里睡着,然后先醒的先放到数组里,后醒的后放到数组里,时间复杂度取决于这个数组里的最大数是多少,理论上可以达到正无穷。 JS是单线程的,可以使用setTimeout来假装一下,下面的手写使用 async 和 await 处理异步函数: let arr = [2,4,-7,6,-9] function getArra...
睡眠排序:顾名思义,就是利用睡眠来实现的排序算法,基本思路如下: 我们为数组中的每个元素都开启一个线程; 然后让该线程休眠元素大小的时间,元素值小的会先醒,元素值大的会后醒; 借助睡眠时间的不同来完成排序。 下面我们来看代码。 C++版: #include <iostream> #include <thread> #include <stdlib.h> #incl...
今天看到了这么一个排序方法,是感觉有点好玩,它的基本思想是:主要是根据CPU的调度算法实现的,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的10倍再加10,不是睡眠和它的数值一样大的原因是,当数值太小时,误差太大,睡眠的时间不比输出的时间少,那么就会存在不正确的输出结果。
你可能对线程有所误解,每个线程是独立,睡眠时间到了会自动唤醒的。至于说计时器的问题,这是线程最基础的东西,希望你再次巩固一下线程的相关知识 4 回复1 收藏 分享 添加回复 白加黑 来自江苏 2022-07-02 想出这个排序算法的人,牛啊。 3 回复 收藏
算法---天才排序算法---睡眠排序 这个事件起源于一个屌丝发表了一个时间复杂度为O(n)的排序算法,这个网址如下:http://dis.4chan.org/read/prog/1295544154大家有兴趣的可以看看。 虽然使用价值不是很高,但是能找到这么一个方法,成为天才也不为过。 它的基本思想是,主要是根据CPU的调度算法实现的,对一组数据...
1publicvoidsleepSort(int[] arr){23/**创建线程类*/4classSleeextendsThread{56privateinttime;78publicSlee(inttime){9this.time=time;10}1112publicvoidrun(){13try{14/*因为毫秒时间太短 如果两个数相差比较小 完成不了排序 建议乘一个系数 比如10*/15Thread.sleep(time*10);16}catch(InterruptedException...
我想到一种二进制快速排序,第一次对最高位二进制进行0和1的分类,然后在对两个子数组进行下一位二进制位的分类,递归重复此操作到最后一位就能排好,这样时间复杂度就是每个数据遍历最高二进制位数O(kn),空间复杂度也不高 5月前·福建 0 分享 回复
睡眠排序通过模拟多线程概念,将每个元素放入线程中,等待元素“醒来”后将其加入排序数组,时间复杂度取决于数组中最大值的大小。理论上,复杂度可无限大。JS为单线程环境,利用setTimeout模拟睡眠排序实现,结合async和await处理异步操作。猴子排序则是一种幽默比喻,意指在无限时间内,随机操作总能实现...