geta1972TweetPocketCheck「マージソートは分割統治に基づいたアルゴリズム」という説明を見かけたが、よくわかりにくかった。いくつかの説明サイトをみて、分割するフェイズと結像(統治)するフェイズを分けて考える事で理解することができた。肝心なことは、こうしたアルゴリズムというお題をプログラミングするという事なのだが、複数言語で書くということを念頭に置いているため、なるべく言語依存しないように書こうと努力している。はじめはブラウザで簡単に実行結果が得られるJavaScriptを採用しているわけだが、確実にC言語やShellでつまずく事は間違いないだろう。オブジェクト思考が反映されている言語とそうでない言語という分割だが、言語依存というのはそんなに間違った考え方ではない事も合わせて最近わかってきた。そもそも、単体の言語で出来ないことと言うのはあまりなく、他の言語では簡単に書けるのにこの言語は書きにくいというレベルが多いという事。そもそもそれを実現するのがプログラマーという職業なのかもしれないね。事前にソースコードをスクリプトコンソールで実行しておき、下記コマンドを実行することで、結果が得られます。今回は3つの関数で実施している。半分に分割関数1つ目の関数は、半分を切り分けるだけの関数で、中間の場所を数値で返している。ちなみに、端数は前方にくっつけるように端数繰り上げにしてある。ソート処理2つ目の関数は、必ずソートされている状態であることが条件の2つの分割された配列を、左側から同時に処理して、小さい方をshiftしていく方式で理論的にソートを実現している。全体フロー関数3つ目の関数は、マージソートの基本フロー関数で、1つの配列グループを再帰的に処理する関数にしている。これにより、分割された配列をそれぞれソートしてその場で返す処理を実現している。mergeSort(arr2);分割関数で対象配列の中間値を取得し、sliceで実際の配列データを、分割、mergeSort関数でそれぞれ分割された配列をソートするという流れ。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。