原帖地址:Genius sorting algorithm: Sleep sort
下面请欣赏这个天才的代码,相信你会大吃一惊的O(∩_∩)O
java版本的:
public class SleepSort { public static void main(String[] args) { int[] ints = {1,4,7,3,8,9,2,6,5}; SortThread[] sortThreads = new SortThread[ints.length]; for (int i = 0; i < sortThreads.length; i++) { sortThreads[i] = new SortThread(ints[i]); } for (int i = 0; i < sortThreads.length; i++) { sortThreads[i].start(); } } } class SortThread extends Thread { int ms = 0; public SortThread(int ms){ this.ms = ms; } public void run(){ try { sleep(ms*10+10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(ms); } }
js版本:
// Javascript function lazySort(list, callback) { var result = []; list.forEach(function(i) { setTimeout(function() { result.push(i); if(result.length == list.length) { callback(result); } }, i); }); } lazySort([4,5,7,1,2,4,5], alert);
这个帖子回复率惊人,你可以拉下去看到各种语言版本的。
先不考虑这个算法实际的用途,我们来看这个作者天才的想法,排序一定要对数进行比较的思想根深蒂固了的人吧?但是这个排序算法不同于其他的排序算法的是不用进行比较运算操作。
相关内容:
2014 最新 web qq 密码的加密方式分析过程,WebQQ 登陆密码加密算法分析
德安全专家破解GSM加密算法 GSM网络破解 监听全球40亿部手机
百度知道提问参数“utdata”加密算法彻底剖析,百度知道防机器人策略
使用 MD5 碰撞算法伪装木马,躲过杀毒软件查杀,加入360白名单
各种吐槽:
1#
寂寞的瘦子 (洞主死前明白一个道理:编程就必须从最难的开始学) | 2014-08-24 17:17
这个算法bug很多的,希望不要钻牛角尖啦。
2#
秋风 | 2014-08-24 17:20
哈哈哈哈
3#
wangbing86 | 2014-08-24 17:30
这个帖子回复率惊人,你可以拉下去看到各种语言版本的
4#
园长 (但愿你是狗,牵你一起走。@z7y @小胖子 噢,最怕你是狗喔,我最怕你不走。@saline @Anonymous 从前 @z7y 有个表弟 @VIP 后来死了。) | 2014-08-24 17:34
你能排 102030434544545435,212243546464656456,12323213213213213123,1122432423432432423,121132424323 不。
5#
园长 (但愿你是狗,牵你一起走。@z7y @小胖子 噢,最怕你是狗喔,我最怕你不走。@saline @Anonymous 从前 @z7y 有个表弟 @VIP 后来死了。) | 2014-08-24 17:36
数字一大你睡下去就别想醒了。
6#
MuZhU0 (蓝翔毕业生,被蓝翔坑了一百八伙食费。) | 2014-08-24 17:40
我看的云里雾里的,并没有大吃一惊,因为我根本看不懂。
7#
动后河 (类的继承) | 2014-08-24 17:44
@园长 大大,我做到了,有没有小红花?
In [1]: x = [102030434544545435,212243546464656456,12323213213213213123,112243242343243] In [2]: x.sort() In [3]: x Out[3]: [112243242343243L, 102030434544545435L, 212243546464656456L, 12323213213213213123L]
8#
小学猹 | 2014-08-24 18:27
确实不错
9#
园长 (但愿你是狗,牵你一起走。@z7y @小胖子 噢,最怕你是狗喔,我最怕你不走。@saline @Anonymous 从前 @z7y 有个表弟 @VIP 后来死了。) | 2014-08-24 18:43
@动后河 我说的是楼主的代码撒。sleep(102030434544545435*10+10); 明显不对,sleep最大值也没那么大嘛,等这线程睡醒了。。。。
10#
jeary ((:??办么怎,了多越来越法方象抽的我)) | 2014-08-24 18:47
多线程的情况下可能出现无法预料的事情- -.系统分配资源需要时间。也就是说,如果用于例如比较π这种需要精度的数字,应该可能会出现误差。而且,如果我要比负数的话该怎么办。
11#
xcoder | 2014-08-24 18:48
@园长 师傅尼果然厉害!
12#
/fd (Http://prompt.ml) | 2014-08-24 18:48
天才与白痴只有一线之隔
13#
魂淡、 | 2014-08-24 18:48
......
14#
jeary ((:??办么怎,了多越来越法方象抽的我)) | 2014-08-24 18:49
只能为想法点赞,不过一睡不醒也是个大问题~~
15#
insight-labs (Root Yourself in Success) | 2014-08-24 19:33
我觉得那珠排序 bead sort才是真正的天才排序算法,可惜在电子计算机里没法实现最优过程,只能模拟。
16#
魂淡、 | 2014-08-24 19:38
@魂淡、 没学过js= =原站的php又不完整。。不过还是勉强看懂一点。
是不是说,设置一个延时,然后这个延时的时间=数,时间过后就把数字输出。这样根据延时输出就能排序了。
是这个意思么。
17#
俺是农村的 | 2014-08-24 20:34
天才与白痴只有一线之隔
18#
Anymous | 2014-08-24 20:54
我怕睡不醒
19#
银冥币 (http://隐泉屋.cc/?) | 2014-08-24 21:01
大数字睡不醒233333
20#
小火苗 (五条大枪看粗细!!) | 2014-08-24 23:04
@魂淡、 申请n个线程,然后让每个线程睡上x时间,由于时间的不同来输入排序,相当于是按照线程的执行顺序来排序。
这思路真是太棒了。。!!!
21#
漂流瓶 (http://shota.cc/) | 2014-08-24 23:56
预读统计下最大位数 然后除以一个整数 比如1000000 这样时间就很小了
22#
心伤的瘦子 (?data;) | 2014-08-25 08:09
@漂流瓶 数字不是正整数的时候就悲剧了
function lazySort(list, callback) { var result = []; list.forEach(function(i) { setTimeout(function() { result.push(i); if(result.length == list.length) { callback(result); } }, i); }); } lazySort([0.4,0.5,0.7,0.1,0.2,0.4,0.5], alert); lazySort([1.4,1.5,1.7,1.1,1.2,1.4,1.5], alert); lazySort([-4,-5,-7,-1,-2,-4,-5], alert);
23#
huliang | 2014-08-25 08:48
思路很赞~~ mark
24#
核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2014-08-25 09:45
卧槽,如此淫贱的排序算法~真尼玛天才~
25#
wefgod (求大牛指点) | 2014-08-25 11:03
确实很猥琐,但是按园长的那个数字,有搞头吗
26#
魂淡、 | 2014-08-25 11:13
数字一大还要再排,用这种方法排列的话。
先分组存到数组,按位数。
同位数再根据每个位数数字排列分组。
至于bead sort,重点是计算机代码里或者说数字里没有一个地心引力。把这个解决了应该就有最佳算法了。
27#
CHForce (带马师) | 2014-08-25 22:07
好有意思的感觉。不过好像很坑爹
28#
Mr .LZH | 2014-08-26 19:29
算法确实猥琐,打破了比较的思路
29#
safe121 (黑阔娱乐群:306596985|||就职于【朝鮮民主主義人民共和國平壤直轄市平安南道中央水表厂】【조선민주주의인민공화국평양직할시평안남도중앙양수기공장】【Pyongyang Central Water Meter Factory, Pyeongannam-do, Pyongyang, DPRK】) | 2014-08-26 20:30
每个数除以一个大数 应该能减少排序所需时间。。。
30#
Knight (查水表。缴wb不杀) | 2014-08-26 20:47
狂赞思路。
31#
insight-labs (Root Yourself in Success) | 2014-08-27 09:49
@魂淡、
确切的说是电子计算机每次只能处理一个指令,这个用量子计算机应该可以很简单实现。
32#
明. (ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็) | 2014-08-27 11:45
负数也可以实现啊. 先把所有数减去最小的数 睡眠 然后放入数组时加上最小的数!!
33#
Manning | 2014-08-27 14:19
利用线程的睡眠时间,如果单纯说想法,我为这个算法点赞
34#
woody | 2014-08-27 14:43
想法好
效率会奇差无比
35#
小囧 ('';!--"<XSS>=&{()}) | 2014-08-27 16:53
还是得赞下啊。。 牛x
36#
hkAssassin | 2014-08-27 17:08
我睡着没醒……
37#
xiaoL (http://www.xlixli.net) | 2014-08-27 17:40
@寂寞的瘦子
又被你惊呆了
38#
Lee Swagger (one) | 2014-08-30 13:14
天才与白痴只有一线之隔
留言评论(旧系统):