挿入ソート
挿入ソートアルゴリズムは、ほとんど手を終え、人々とのカードを再生するとき挿入ソートが機能し、ソートする要素の数が少ないために効果的です。往走査からソートされた順序でソートされていないデータについて、対応する挿入位置を見つけます。
すなわち、適切な場所を見つけるために、既に配列一つずつ比較順序付け要素を挿入します。
擬似コードを表し、
長さ1 [A] - J <用
[J] - キー<を行います
私は< - J-1を
一方、(I> 0 && A [i]が>キー)
[私は+ 1] = A [i]を行います
私は< - I-1
[I + 1] =キー
Javaは達成します
クラスInsertion_Sort {
パブリック静的無効メイン(文字列[] args){
INT [] A =新たINT [] {2,4,3,6,1,1,7,4}; //ソートされていない配列
int型のlen = A.length。
{(J ++ INT J = 0; J <A.length)のために
INTキー= A [J]; //要素を挿入します
int型I = J - 1; // 0 - J-1配列をソートされ、A [j]は[0] -A [i]の中に挿入されます
一方、(I> 0 && A [i]が>キー){//一一比较
[I + 1] [I] =。
私 - ;
}
[私は+ 1]キー=; //挿入
}
}
}
アルゴリズムの複雑さ
列をソートする挿入ソートは、好ましくは、ケースは、この時間は動作のみを交換することなく、N-1に時間を比較する必要が、注文されたが、時間複雑度はO(N)
すべての要素が逆の順序でランク付けされる最悪の場合、この時間は、nを比較する必要がある(N-1)/ 2倍、即ち、+ 0,1 + ... + N-1回、時間複雑度は、O(n²)であります平均時間複雑さの挿入ソートはO(n²)
アルゴリズム分析
ビューの時間の複雑さの点から、それはデータアプリケーションの大量のソート挿入ソートには適していません。しかし、規模の一種の少量で、効果の挿入ソートが理想的である、マージソート、バブルソートよりも優れています。
一定の係数C1 C2マージソートより挿入ソート定数因子少ないので、c1n²c2log2 nは小規模でよりも少ないです。したがって、我々は、高速行に切り替えるために、特定のサイズのために、小規模な挿入ソートのソートを選択し、そうマージソートにすることができます。
ソートはまた、最適化された比較の数を減少させるためにバイナリサーチを挿入してもよいです。