挿入ソート(insertion sort)は、 以下のような手順でソートを行うアルゴリズムです。 安定な内部ソート。
人間が手作業で物を並び替えるのにもっともなじみやすいアルゴリズムだと言われています。 また、シンプルでかつ O(n2) のソートの中では高速な部類に入るので、 非常によく使われます。
概ねソート済みの配列に対しては高速ですが、 逆順に並んだ配列に対してはかなり低速になります。 「概ねソート済みのものに対して高速」という性質のため、 他のソートアルゴリズム(特にクイックソート)で大まかにソートして、 最後は挿入ソートを行うという使い方をされたりします。
/// <summary> /// 挿入ソート。 /// </summary> /// <param name="a">対象の配列</param> public static void InsertSort<T>(T[] a) where T : IComparable<T> { int n = a.Length; for (int i = 1; i < n; i++) for (int j = i; j >= 1 && a[j - 1].CompareTo(a[j]) > 0; --j ) Swap(ref a[j], ref a[j - 1]); }