ソートアルゴリズムの一つであるマージソートの紹介です。このソートはコンピュータに比べて残念な記憶力の人間でも身一つで大規模な相手に対して実行可能な高速ソートアルゴリズムです。実際、ボードゲーム、TCGなどでカードを整理する時に便利です。コンピュータにソートをやらせるならメモリをあまり食わず高速な賢い備え付けのソート(多分大体クイックソートの変形)を使った方がよいと思います。コンピュータ的な利点は、同値の項目でも並び替え前の関係を維持する安定ソートである点、データを分割して実行してもそれほど遅くならない点(メモリに乗りきらないくらい巨大なデータ相手に強い)でしょうか。
マージソートの手順は以下の通りです。
(日本語wikipediaより引用)
- データ列を分割する(通常、二等分する)
- 分割された各データ列で、含まれるデータが1個ならそれを返し、2個以上ならステップ1から3を再帰的に適用してマージソートする
- 二つのソートされたデータ列(1個であればそれ自身)をマージする
下のGIFはデモです。
このソートは安定して塊を置くスペースがあるならば、デモ中で赤く示されているわずかな部分に注目するだけで実行できます。このためソート対象が巨大になってもデモと同様のことが人間の手で十分やれます。塊が目印になるので途中で放置しても再開が簡単な点、小さな塊を柔軟に好き勝手並びかえるのが有利な点(アルゴリズムによっては最終的に変わらなかったり、遅くなったり)も人の手で行うのにおすすめです。