選択ソートの仕組みを徹底解説!アニメーションで学ぶ「一番を探す」ソート【ソートアルゴリズム入門】#1

選択ソートをインタラクティブなツールも駆使しながら初心者・初学者向けにわかりやすく紹介します。

単純ソート3種のうちの一つ”単純選択ソート”

ソートアルゴリズムのうち、単純な並び替えでソート(並び替え)を行うものとして、挿入ソート・バブルソート・選択ソートがあり、これらを単純ソートと呼びます。

単純ソートの選択ソートの実行例。選択ソートを手元で試せるツールの実行結果。

選択ソートの実行例 アニメーション

(※このほかにも、比較的低性能なソートを単純ソートと呼ぶ場合がある)

選択ソートは、その名の通り「未整列のデータ群から、最大値(または最小値)を選択 (Select) し、正しい位置(今回は末尾)に配置する」を繰り返す、非常に直感的なアルゴリズムです。

今回は、未ソート領域から「最大値」を見つけて配列の後ろから確定させていく「最大値選択法」を、自動探索アニメーション付きのツールで学んでいきましょう。

ソートアルゴリズム入門のまとめ記事のです。このシリーズでは、単純ソートから始め分割統治法、最終的にはカウンティングソートや基数ソートに至るまで様々なソートアルゴリズムを学べます。 11 記事
シリーズ

ソートアルゴリズム

ソートアルゴリズムについて、単純ソート、分割統治法などの比較するソート、基数ソートなどの比較しないソートまでその仕組みを...

1. 選択ソート(最大値選択法・単純選択法)とは?

選択ソート(最大値選択法)は、以下のステップを繰り返すアルゴリズムです。

  1. まず、配列全体(未ソート領域)の中から一番大きな値(最大値)を探し出します。
  2. 見つけた最大値を、未ソート領域の一番後ろ(末尾)の要素と交換 (Swap) します。
  3. これで、配列の一番後ろの要素は「確定(ソート済み)」となります。
  4. 次に、残りの「未ソート領域」(配列の先頭から末尾-1まで)に対して、再び 1. と 2. を繰り返します。
  5. 未ソート領域が1つになるまでこれを続けると、全体が整列されます。

2. 選択ソートでトランプを並び替えたら?

一番初めは、全体のうちの最大値を探す(選択).

最大値が見つかったので、一番右と入れ替える

Kは最大で確定したので、Kを除く未ソート部分(Qから2まで)の最大値を探す(選択).

3回目も同様にして、未ソート部分から最大値を見つけて選択し、入れ替える。

4枚目以降も同様にして、最後まで入れ替えたら完了。

3. 選択ソートの動きを見てみよう!

選択ソートで並び替えを試せます。ステップ実行ボタンを押して、並び替えを進めてみてください。

黄色が未ソート部分での最大値で、オレンジになっているところはすでに並び替え終わっています。

「再配置」を押して開始してください

選択ソートの疑似コード(ソートの手順)

手元で試せる環境があったら自身の慣れているプログラミング言語で以下の処理を書いてみると理解が深まると思います。

algorithm SelectionSort(L) is
  n ← length of L
  
  // i: 未ソート領域の末尾インデックス。
  // (n-1 から 1 まで、1ずつ減らす)
  for i from n-1 down to 1 do
    
    // --- 未ソート領域 (L[0]...L[i]) から最大値のインデックスを探す ---
    max_index ← 0 // ひとまず先頭を最大値とする
    
    // j: 探索インデックス (1 から i まで)
    for j from 1 to i do
      if L[max_index] < L[j] then
        max_index ← j // より大きい値が見つかったら、場所を更新
      end
    end
    
    // --- 最大値 (L[max_index]) と未ソート領域の末尾 (L[i]) を交換 ---
    temp ← L[max_index]
    L[max_index] ← L[i]
    L[i] ← temp
    
  end
  
  return L
end

まとめ

  • 選択ソートは、一番大きいもの(小さいもの)を選んで入れ替えるアルゴリズム。
  • データの交換回数が少ないのが特徴。
  • データが整列済みでも、必ず全探索するため速くならない。

次は、単純ソートの2つ目「挿入ソート」の仕組みを見ていきましょう!

挿入ソートをインタラクティブなツールも駆使しながら初心者・初学者向けにわかりやすく紹介します。

挿入ソートの仕組みを徹底解説!アニメーションで学ぶ「正しい位置に差し込む」ソート・単純挿入法【ソートアルゴリズム入門】#2

ソートアルゴリズム入門「挿入ソート」の仕組みを解説。トランプの手札を並べ替えるような直感的な動きを、インタラクティブなアニメーションツールで1ステップずつ確認できます。「整列済みの場所に差し込む」とはどういうことか、その目で見ながら学びましょう。

3つ目の単純ソート バブルソート(単純交換法)

バブルソートをインタラクティブなツールも駆使しながら初心者・初学者向けにわかりやすく紹介します。

バブルソートの仕組みを徹底解説!アニメーションで学ぶ「ひたすら比較・交換」ソート・単純交換【ソートアルゴリズム入門】#3

ソート入門の定番「バブルソート」の仕組みを解説。隣同士を比較して交換するだけの単純な動きを、インタラクティブなツールで1ステップずつ追体験できます。重い(大きい)値が水底に沈んでいく(=末尾に確定する)様子をアニメーションで学びましょう。

ソートアルゴリズム入門のまとめ記事のです。このシリーズでは、単純ソートから始め分割統治法、最終的にはカウンティングソートや基数ソートに至るまで様々なソートアルゴリズムを学べます。 11 記事
シリーズ

ソートアルゴリズム

ソートアルゴリズムについて、単純ソート、分割統治法などの比較するソート、基数ソートなどの比較しないソートまでその仕組みを...

単純ソートの計算量は?(単純ソートを全て閲覧して理解した後推奨(11/13公開予定))

計算量とは?オーダーについて中学生にもわかるように説明します。身に着けたオーダーの計算方法で単純ソートを評価してみよう。

計算量 とは?データ数が倍になると手間が4倍?単純ソートの計算量O[n^2]を中学生でもわかるように解説【ソートアルゴリズム入門】#4

なぜ単純ソートはデータが増えると遅くなる?その「遅さ」を測るモノサシが「計算量」と「O記法」です。この記事では、O(n^2) といった計算量の考え方を、中学生でもわかる「作業の手間」に例えて解説。グラフで「増え方の勢い」を学び、次の高速なアルゴリズムへ進みましょう。

ここまで読んでいただきありがとうございます。

では、次の記事で。 lumenHero