LoginSignup
4
5

More than 5 years have passed since last update.

sleep sort の解説

Last updated at Posted at 2013-05-15

どこで笑っていいのか判らない人のために解説

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倍速まで最適化されました。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5