見出し画像

Pythonでアルゴリズム「挿入ソート」(1):順番に右に詰めてください~♪

今回は、Pythonでアルゴリズムシリーズ!の中でも「挿入ソート」を扱います~。

「これでソートのアルゴリズム3つ目ですね~🙂」

そうなんです。「バブルソート」、「選択ソート」に続いて、早くも3つ目なんですが、まだまだあるんですよね…。そして、この「挿入ソート」はその中でも、基本の部類に入るのです!

よし、この「挿入ソート」も身に付けたるで~、と気合が入ってきましたよ(私だけ😅)。

挿入ソートの特徴

詳細に入る前に、この整列(ソート)のイメージを掴みましょう。めあては、数字を「昇順に並べる」ことです。未整列の数字カードを取り出しては、小さい順に並べることによってソートを完了させます。

分かりにくい😭?では、もう少し具体的にしましょう。

数字のカード5枚がバラバラに存在します。まず、そのカード達から1枚だけ取り出します。「9」でした。そのカードをそっと別の場所に置きます。これが初期状態です。そして、「9」は整列完了です。

つづいて、もう1枚をカード達から取り出します。「6」でした。「9」より小さいです。「9」をちょっと右にずらして、空いた場所に「6」を置きました。「6」「9」は、整列完了です。

さらに、1枚カードを取り出しました。「10」です。整列済みの一番右にある「9」よりも大きいです。「9」の右に「10」を置きました。「6」「9」「10」は整列完了です。

次のカードは、「8」でした。「10」を右にずらし、さらに「9」も身に右にずらしました。しかし、「6」は、「8」より小さいのでずらしません。空いたところにの「8」を置きました。「6」「8」「9」「10」は整列完了です。

最後のカードは「7」です。「8」「9」「10」のカードを右にずらして空いたところに、「7」を置けば、「6」「7」「8」「9」「10」となり、すべて整列完了です。

と、ここまで書きましたが、まだ分かりにくい!!文章で表現するのにも限度がありますな…😭。やっぱり絵にしましょう、絵に。

ポイントは、挿入したい値よりも大きい値は、右に右に1つずつずらしていくところです。

「整列済」vs「未整列」で数字を分ける

よし、今度こそ、挿入ソートのイメージを掴みますよ、絵を使って!(結構、描くのが大変なんですよ😅)。

1.数値を準備

まず、未整列の数値を5つ準備します。見事に未整列です…。これらの数値を昇順に並べたい!果たしてどうする?

2.「整列済」と「未整列」の値に分ける

まず、これらの数字のうち、左端を「整列済」として、残りは「未整列」とします。

「なんの整列作業もしていないのに、整列済み!?🤔」

整列対象が一つ「9」しかないから、整列済みなんですよ~(多分ね)。

3.未整列の左端の値を取り出して保存

続いて、未整列の値のうち、左端の値を取り出します。これがカードを取り出したところですね~。tmpという箱にでも入れておきましょう。

この引き抜いた値を、整列済みの値の正しい場所に挿入したいんです。そして、未整列の値のうち、左端に空きスペースができましたね。ここがミソです。

4.挿入したい値より大きいなら右に詰めてください!

では、整列済みの値の右端からtmpの値を大きさ比べをします。tmpより大きいですか?なら、その数字は邪魔ですね。

じゃあ、右に詰めていただきましょう。すると、今度はそこに空きスペースができます。病院の順番待ちか😅!?さきほどスペースを作っておいたのでこれができるわけです😆。

5.空いたところにtmpを挿入

早くも整列済みの数値の比較が終わってしまいました。一つしかなかったので。じゃあ、空いたところにtmpの値を入れましょう

6.整列1回目完了!

はい、これで6と9の2つの数字は、整列できました。これにより、整列済みのエリアが一つ分広がりましたね。

きっと、これを繰り返していけば、5つの数字の整列が出来上がるはずだ~、と直感したところで、今日はここまで。

では、ビーダゼーン!

※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。


いいなと思ったら応援しよう!