[アルゴリズム] 挿入ソートの実装(Shell編)

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

挿入ソートのshell編ですが、Object思考でない言語の洗礼を受けた感じで非常に苦労させられました。
何が苦労したかというと、関数の受け渡し値が複数且つ、配列を含むと、うまくいかないことを思い知らされたのと、shell言語内で使用している変数は全てグローバル変数扱いとなってしまうので、変数名設計をしっかりしないといけないという事ですね。
少し長くなるプログラムでは、不具合が出た時に、原因究明と修正作業が非常に大変でしたね。
とりあえず、記事では、修正後の結果だけなので、あまり苦労が見えない形になっているのがもどかしいです。

ソースコード

解説

配列に値を追加

他の言語ではpushとかappendとなるところが、shellでは、下記のような書き方で配列の値追加を行うことができます。
特定の基本関数があるわけではなく、意外とアナログな書き方にビックリしました。

2つの配列どうしの結合

この箇所ですが、値の追加とやり方が似ているので、さほど説明はいらないでしょう。

関数の戻り値を配列で受け取る

()で囲って上げるだけ内部でechoされた個数に応じて配列として受け取ることができます。

関数について

関数のルールはいくつかあることに気が付きました。
まず、関数はあまり階層的にしないほうがよく、階層は1階層で並列にした方がいいという事です。
理由としては、変数受け渡しがうまくできないので、ほぼグローバル変数で行うため、あまり関数に落とし込む意味が無いことと、
グローバル変数を汚さないようにしなければいけないためですね。
そして、関数定義はプログラムファイル冒頭で行い、処理実行は関数定義のあとで行わなければいけないということですね。
Javascriptでも同じ事が起こりえますが、実行するときにメモリに関数が定義されていないとエラーになるからですね。

実行

今回は配列をコマンド実行時に直接入れるようにして汎用性を持たせてある。
数は任意で半角スペース区切りで実行できるのですが、上限値は検証していません。
有志の人がいれば、端末スペックと上限値などを調べてもらえると助かります。

関連リンク

挿入ソート

解説
Javascript
PHP
Python
Shell

アルゴリズム過去記事

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

Leave a Reply

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