Help us understand the problem. What is going on with this article?

sleep sort の解説

More than 5 years have passed since last update.

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

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

snsk
日本のQA/テストエンジニア。ウェブとちっさいパソコンとふとんがすき。
https://snsk.github.io
veriserve
お客様の製品・サービスの品質向上や改善に、検証のプロフェッショナルとして貢献します。
https://www.veriserve.co.jp/
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