红联Linux门户
Linux帮助

天才排序算法

发布时间:2011-06-18 22:51:16来源:红联作者:年年年
小弟在微博上面看到的帖子:
#!/bin/bash
function f(){

sleep "$1"
echo "$1"

}

while [ -n "$1" ]
do
f "$1" &
shift
done
wait

#./test4 5 3 6 3 6 3 1 4 7
结果是
1
3
3
3
4
5
6
6
7
小弟初学shell编程,请高手指教原理。跪求吖
文章评论

共有 6 条评论

  1. qq9293000079 于 2011-07-23 10:37:56发表:

    :0D1 还不准备学SHELL

  2. julymin 于 2011-07-23 04:45:31发表:

    高。。。。

  3. wurr707 于 2011-06-19 20:48:55发表:

    有点意思啊

  4. hpy1165331898 于 2011-06-19 19:56:47发表:

    呵呵

  5. 年年年 于 2011-06-19 08:25:31发表:

    2# age


    学习了。谢谢

  6. age 于 2011-06-18 23:10:44发表:

    [i=s] 本帖最后由 age 于 2011-6-18 23:19 编辑 [/i]

    sleep是休眠
    这个算法的主要特点在那个子函数里[code]function f(){

    sleep "$1"
    echo "$1"

    }[/code]$1是个数值参量, 先sleep "$1"秒, 再把$1输出.
    比如$1为4, 那么就先休眠4s, 再输出4
    如果$1为5, 那么就先休眠5s, 再输出5
    因而$1越大, 休眠时间也就越长, 从而输出也越慢
    这就实现了排序
    这种方法有点巧妙, 不过不大实用, 只适合小数字时.
    在后面的函数调用里将f函数设为后台运行, 那么最后需要的休眠时间基本上等于最大的那个数
    比如我在后面加上一个10000, 那整个脚本就需要休眠10000s, 约为166分种, 快三个小时了