ソートの学習では選択ソートをはじめにやるべき

配列のソートはいまさらいうまでも無いアルゴリズムですが、なぜか最初にくるアルゴリズムバブルソートだったりするのはなぜでしょうか。正直バブルソートは直感的にわかりにくいと思います。

比較的わかりやすいのは選択ソートだと思います。「一番小さいもの探してを一番頭に持っていく、二番目に小さいものを探して二番目に持っていく、...」ものだから。

Javaで書くと以下のようになるのも自明でしょう

class Selection {
  private static final String names[] = {
    "taro",
    "jiro",
    "saburo",
    "shiro",
    "goro",
  };

  public static void main(String[] args) {
    selection_sort(names);
    for (String name : names) System.out.println(name);
  }

  private static <T extends Comparable<T>> void selection_sort(T[] array) {
    for (int i = 0; i < array.length; i++) {
      int min = i;
      for (int j = i + 1; j < array.length; j++) {
        if (array[j].compareTo(array[min]) < 0) min = j;
      }
      swap(array, i, min);
    }
  }

  private static <T> void swap(T[] array, int i, int j) {
    T tmp = array[i];
    array[i] = array[j];
    array[j] = tmp;
  }
}