15
回答
热词:“休眠排序”
华为云4核8G,高性能云服务器,免费试用   

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

举报
红薯
发帖于7年前 15回/638阅
共有15个评论 最后回答: 7年前

这个能正确排序?

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

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

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

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

引用来自“G.”的答案

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

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

引用来自“xyz555”的答案

引用来自“G.”的答案

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

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

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

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

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

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

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

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

 

引用来自“xyz555”的答案

这个能正确排序?

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

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

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

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

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