[アルゴリズム] マージソートのプログラミング(AWK編)

integration-1777535_1280
LINEで送る
Share on GREE
Share on LinkedIn

やはりこの言語、ハマりまくりでした。
AWK言語が便利だと思うのはLinuxOSにデフォルトで存在する事と、ディスクIOの扱いと、コマンドラインのワンライナーが便利すぎる点でしょう。
今回のようにアルゴリズムを関数化するのは、あまり得意な言語出ないことは100も承知ですが、ここはTRYする場なので、そうしたセオリーは無視して
挑戦してみます。

ソースコード

実行

今回から配列は、カンマ区切りのCSV方式の文字列として受け渡すようにしてます。
本当はもっと配列っぽい見え方にしたかったんだけどね。

解説

ローカル変数の扱い

AWKは基本的に全てグローバル変数になるという事を認識した上で、特定の関数内でのみ対応したいローカル変数を扱いたい場合は、
関数の引数に、定義してあげることでローカル扱いになるようです。
そして、awk言語を使う人の暗黙の了解であるルールが存在するらしく、ローカル変数を明示的に定義する場合は、変数の前に
スペースを入れて見た目分かるようにするらしいです。
もちろん、スペース入れなくてもローカル変数扱いされますよ。

配列の扱い

shellでも同様の処理を行ったんですが、関数に配列を受け渡す事はできても、returnする事ができないので、
受け渡しも受け取りも、全て文字列に戻して行うようにルール化してみました。
なので、少し長いプログラムになってますが、今後進めていく上で簡素化されていくでしょう。
ちなみに、関数化する方式は全て統一していて下記のようにしています。

arrが配列でresがカンマ区切りの文字列です。

配列操作(追加)※push

awk言語には配列の便利な関数が存在しないので、全て手作業で行います。

上記の書き方で、配列の後ろに値を追加することができます。

配列の先頭を除外する※shift

これが一番困った処理なのですが、やり方としては、配列の先頭を無視して2番目以降を繰り返し文で追加していくやり方です。
ただし、配列の数が少ないとエラーが出るので、if文を入れてます。

マージソート記事

解説
JavaScript
PHP
Python
Shell
AWK

アルゴリズム過去記事

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

Leave a Reply

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


*