热词:“休眠排序”

红薯 发布于 2011/06/30 13:39
阅读 688
收藏 1

chan BBS 上一个排序的程序火了,它叫休眠排序,很有意思。

    #!/bin/bash
    function f() {
        sleep "$1"
        echo "$1"
    }
    while [ -n "$1" ]
    do
        f "$1" &
        shift
    done
    wait

其实它的原理很简单,就是,要对N个整数进行排序的话,启动N个进程(线程),每个进程休眠对应的整数指定的秒数,然后再打印该数,最后你在终端上看到的肯定是排序之后的结果了……看了之后你会不会也觉得这太坑爹了?!可是,它就是能工作,而且占用CPU很少!

这里有一些语言的休眠排序代码供参考,如果大家有更多请分享

http://www.oschina.net/code/tag/sleep-sort

加载中
0
烈冰
烈冰
有创意啊
0
0
芙蓉镇
芙蓉镇

这个太神了,数据少的话还行,如果数据太多的话也不行吧

0
wyzuomumu
wyzuomumu
这个特性都让他发现啦,佩服啊
0
xyz555
xyz555

这个能正确排序?

已知的是每个指令都是要耗时的。

现在假设一个cpu,并且不支持超线程。每个指令耗费1ms

10000000,9999999,9999998............1

排序这个数组答案肯定不对了。

0
G.
G.
每个指令耗时1ms?
单片机都用不了 1ms 啊!

1ms 对CPU来说, 简直就是 漫漫长夜
0
xyz555
xyz555

引用来自“G.”的答案

每个指令耗时1ms?
单片机都用不了 1ms 啊!

1ms 对CPU来说, 简直就是 漫漫长夜
都说了是假设,如果对这假设有意见,那加大起始数。
0
王仕超
王仕超

引用来自“xyz555”的答案

引用来自“G.”的答案

每个指令耗时1ms?
单片机都用不了 1ms 啊!

1ms 对CPU来说, 简直就是 漫漫长夜
都说了是假设,如果对这假设有意见,那加大起始数。
test
0
xyz555
xyz555

正因为程序执行指令要耗时,如果出现相同的数那也会执行不正确,比如

12313、34535、........、1234、.......1234、..........

像这样的乱序数组也会排序不正确。

或者相差很小,中间间隔很多数。

12313、34535、........、1234、.......1233、..........

像这样以纳秒为单位的sleep的话,假设指令周期是1/100(ns),执行一个sleep指令就要1个周期的话。那么1234和1233之间多于100个数就会导致排序不正确。

 

0
五味格子
五味格子

引用来自“xyz555”的答案

这个能正确排序?

已知的是每个指令都是要耗时的。

现在假设一个cpu,并且不支持超线程。每个指令耗费1ms

10000000,9999999,9999998............1

排序这个数组答案肯定不对了。

这个数组可以 但是如果有相同值的数组就难说了
返回顶部
顶部