どこで笑っていいのか判らない人のために解説
sleepsort.bash
#!/bin/bash
function f() { #関数fの定義
sleep "$1" #第1引数の数だけsleepする
echo "$1" #sleepが終わったら標準出力にその引数を表示する
}
while [ -n "$1" ] #引数の数だけループ
do
f "$1" & #関数fをバックグラウンドで実行(&) ※ここがキモ。ドンドン後ろに回す
shift #引数をずらして"$1"に入れていく
done
wait #後ろに送ったジョブの終了を待つ
example usage
$ ./sleepsort.bash 5 3 6 3 6 3 1 4 7
引数に「5 3 6 3 6 3 1 4 7」と与えられたとき、「f "$1" &」によって8つのジョブが(ほぼ)同時に走り、1秒経った時点で「echo 1」3秒経った時点で「echo 3」がほぼ同時に3回実行され ... 7秒後に「echo 7」が実行されて完了します。このソートのすごい?ところは、実行に掛かる時間の中で支配的なのが大抵のソートアルゴリズムにおける「要素数」ではなく「要素の中の最大値」である部分です。なお、元ネタの掲示板では、すぐに10倍速まで最適化されました。