睡眠排序算法 睡眠排序算法是⼀种⽐较另类有趣的排序算法,其核⼼思想与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...
你可能对线程有所误解,每个线程是独立,睡眠时间到了会自动唤醒的。至于说计时器的问题,这是线程最基础的东西,希望你再次巩固一下线程的相关知识 4 回复1 收藏 分享 添加回复 白加黑 来自江苏 2022-07-02 想出这个排序算法的人,牛啊。 3 回复 收藏
sleep(s*10+10);//睡眠指定的时间 }catch(InterruptedException e) { e.printStackTrace(); } //输出该数 System.out.println(s); } } 若待排序的数值比较小,则结果存在很大的误差。比如说,上边的程序两次运行结果如下: 但是,当数值较大时,如int[ ] arr = {10,40,70,30,80,90,20,60,50},则结果...
【排序算法--睡眠排序】 我们学数据结构的时候会学到多种排序算法,基本上都是基于比较的排序,下面的这个windows xp系统下载排序算法并不是基于比较,确切的说它是基于cpu调度算法实现的,这个算法的作者称之为--睡眠排序。 它的基本思想是,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的...
我想到一种二进制快速排序,第一次对最高位二进制进行0和1的分类,然后在对两个子数组进行下一位二进制位的分类,递归重复此操作到最后一位就能排好,这样时间复杂度就是每个数据遍历最高二进制位数O(kn),空间复杂度也不高 5月前·福建 0 分享 回复
不知道大家知道这个算法没有,就是靠睡觉完成排序的。 比如数字1 4 3,第一个数字1的时候,创建一个线程,然后让线程休眠1个时间单位,依次是 4 和 3个单位。 因为睡眠的时间不同,线程醒的时间也不同。3会比4先醒过来,这就完成了简单的排序。 如果在面试的时候,你想不起冒泡,想不起归并,也想不起快排,就偷...
睡眠排序通过模拟多线程概念,将每个元素放入线程中,等待元素“醒来”后将其加入排序数组,时间复杂度取决于数组中最大值的大小。理论上,复杂度可无限大。JS为单线程环境,利用setTimeout模拟睡眠排序实现,结合async和await处理异步操作。猴子排序则是一种幽默比喻,意指在无限时间内,随机操作总能实现...