[アルゴリズム] バケットソート(Shell編)

harvest-tomatoes-2101480_1280
LINEで送る
Share on GREE
Share on LinkedIn

今回のバケットソートは、全ての言語で共通の仕様にすることが難しく、言語毎に細かく仕様を変更してしまっています。
具体的には、多重配列が使える言語と使えない言語があるので、多重配列が使えない場合は、単次元配列で、中に入る数字は同じという事で、入っている個数の値を保持するようにしてます。(ちなみに、多重配列が使える場合は、中に入る文字をそのまま2次元目の配列に放り込んでいます)
ただ、改めて感じたのは、「出来ないことは無い」という事。

ソース

実行

解説

配列に値が入っているか確認

jsのtypeof、phpのisset、こういった便利機能はshellには存在しません。
下記のように、-z条件を使って、値がブランクかどうかを確認しましょう。
デメリットとしては、keyのみセットされている場合はブランクなので、keyの存在確認ではないことを注意すること。
今回のアルゴリズムは、「値がある=配列が有効」という事なので、これで良し

ちょこっと計算

他の言語の様に(…)という計算をさっくり入れることが難しいshell言語。
少しもどかしいですが、手順としては、...とコマンドを実行させて、中身でechoして、bcしてあげるだけなので、お作法を覚えて怖がらずに行きましょう。

配列の扱いでの注意点

shellは変数の扱いが非常にもどかしい言語です。
定義の時や、代入の時は、

とするんですが、参照する時は、

という風に、$…や${…}というフォーマットで扱わなければいけない。
こういう仕様と割り切るしか無いんですが、非常に間違いやすく、再代入や、追記の時に$を取り忘れることがあるので、
注意しましょう。

関連リンク

kiwipedia

マージソート記事

解説
Javascript
PHP
Python
Shell

アルゴリズム過去記事

http://wordpress.ideacompo.com/?cat=562&tag=Algorithm

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*