5
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

sleep sort の解説

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?