[アルゴリズム] クイックソートの実装(Shell編)

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

WEBサービスを作っているエンジニアをしている場合、どのくらいの割合でShellスクリプトをコーディングするかを少し考えてみたが、サーバーバッチを作る時以外はないだろうと考えた。
ただ、個人的には、LinuxOSでは必ず動作するこの言語を利用しない手はなく、ちゃんとした書き方をしておけば、サーバー間における汎用性は半端なく高いのではないかと考えられるので、かなり強力なスクリプト言語だと考えてます。
そうそう、MacOSXもUNIXベースなので、Linuxと同じと考えてもいいですね。

ソース

実行

今回も乱数の値はプラスの整数しか受け付けていません。

解説

今までのSortプログラムの中で一番苦労しました。
それは、Shell言語における関数の配列受け渡しやif文に非常に強い癖のある条件がいくつかあるため、かなり難航しました。
下記ポイントをクリアしてなんとか完了することができました。

dockerのshellでfunctionがエラーになる

バージョンを確認してみる

あれ?dockerの方がバージョンが新しい・・・
別の原因ぽいので調査・・・

実行エラーの対応

プログラムを実行した際に下記のようなエラーが出た時の対応をどうするかメモしておきます。

unary operator expected

このエラーの場合は、変数の型がstringになっているのに、数値として扱おうとしている事が原因であることが多いみたいです。
if文やwhile文の条件判定式で、$leftとなっているところを”$left”と文字列化してあげるとうまくいきます。
数値のはずの変数の中に意図しない文字列が入ってしまっていないかチェックしてみましょう。
ちなみに、今回のこのエラーは、「7+1s」となっているエラーの箇所で意図しない「s」という文字が混入していました。
凡ミス!!!!!

計算式の注意点

他の言語のようにインクリメントを使ったりできないshell言語は、計算式の時にも作法があり、下記のような書き方をします。

exprコマンドを通さないとイケないので、慣れないとめんどくさくて仕方がないです。
また、$a + $bも、半角スペースを入れないとエラーになります。
しかし下記のようにする事で計算は実行できますのでどちらか好きな方を使うのが良いでしょう。

if文の制限

Shellスクリプトのif文は&&で条件をつなげる箇所に制限があるようです。
例えばJSで以下のように3つの条件をANDで繋いだとしたら、Shellはどう書くかをメモしておきます。

あと、shellのif文の書き方は何パターンかありますが、この書き方の場合は、[]の中にちゃんと半角スペースを入れることを忘れないようにしましょう。
エラーになりますよ。

参考リンク

クイックソート

解説
Javascript
PHP
Python
Shell

アルゴリズム過去記事

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

Leave a Reply

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