アフィリエイト広告を利用しています
最新記事
カテゴリアーカイブ

2019年11月04日

基本選択法(選択ソート)

配列の中から探索した最小値または最大値と
その他の要素を比較してソートしていくのが基本選択法です。
選択ソートとも言われます。
最初は、配列のインデックス0を仮の最小値としてソート開始します。

下記は、最小値を探索して要素をソートするアルゴリズムです。

public class Demo {
 public static void main(String[] args) {

  int[] num = { 50, 30, 10, 20, 5, 90, 15, 2, 9 };
  sort(num);
  for(int s : num) {
  System.out.print(s + " ");
  }
 }

 public static void sort(int[] data) {
  for(int i = 0; i < data.length - 1; i++) { //最小値との入替え
   int min = i; //仮の最小値
    for(int j = i + 1; j < data.length; j++) { //最小値の探索
     if(data[j] < data[min]) {
      min = j;
     }
    }
   int tmp = data[i];
   data[i] = data[min];
   data[min] = tmp;
  }
 }
}

========== 実行結果 ==========

2 5 9 10 15 20 30 50 90

==============================

内側のforで探索して見つけた最小値と仮の最小値の交換を
外側のforで行っています。
バブルソートのように1ループで複数交換を繰り返すのではなくて
選択ソートは、1ループで1回交換になります。

仮の最小値とそれ以外の要素を比較して1回交換。
次もまた仮の最小値とそれ以外の要素を比較して1回交換。
またまた次も仮の最小値とそれ以外の要素を比較して1回交換。

と、こんな感じの処理が繰り返されてソートされます。
条件を満たしていない時には交換されません。

外側のforが「data.length - 1」になっているのは
選択ソートが、データN個に対して
「N(N - 1)/2」回の比較と「N - 1」回の交換を行うから。

地球の末路!?




検索