まず、移動マップ・プレゼンテーション
分析の第二に、アイデア
例えば、昇順で:
1.第二トラバースから出発し、
2.現在の数(第2の数字は最初のパスである)数はフロントの現在の数よりも大きい場合に、前のシーケンス番号と比較され、この数は位置の現在の数、現在のインデックス番号-1に配置されます、
3.現在の数は、フロントまでの一定数以下であるまで、上記の手順を繰り返し、現在の番号は、この位置に置きます
1-3上記のステップは、現在の数が注文数であり、現在の内側ループの目的は、順序付けられたシーケンス内の番号の前に挿入されていることを保証することです
4.繰り返し最後の桁、最後の桁にトラバースされるまでステップ3と適切な位置に挿入され、挿入ソートの終わり。
分析の考え、以下に示すように、それぞれが実行フローを渡します。
第三に、複雑分析
1時間複雑:挿入アルゴリズムは、順序付けられたシーケンスの前部は、単に特定の場所を取るの現在の番号の前に挿入されていることを保証することです。
元々のアレイを注文した場合、最良の場合の時間の複雑さの下では、配列はOであるので、(N)
配列が正確に停止している場合=、このような元の配列が54321であるように、逆たい大に小さな配置、各パスの数は、n-1の合計+ N-2 +を行わなければ、バックの前に移動します... + 2 + 1 = N×(N-1)/ 2 = 0.5×N2 - 0.5 * n回、低力率を取り除くので、O(N 2)の最悪の場合の時間の複雑
平均時間複雑度(N + N2)/ 2、平均時間計算量はO(N 2)となるように
前記空間的複雑:挿入ソート、サイズに関係なく、空間複雑さの2つだけ現在の一時変数の数、添え字、N:O(1)
次の4つは、Javaコードはあります
java.util.Arraysインポート;
publicクラスinsertSort {
パブリック静的無効メイン(文字列[] args){
INT [] = N-新しい新しいINT [] {20,12,15,1,5,49,58,24,578,211,20,214、 } 78,35,125,789,11;
INT TEMP = 0、J;
のための(INT I = 1; I <n.length; Iは++){
TEMP N- = [I]は
、(Iため= J; J> 0; J、 ){
//現在のカウントが上記の現在の数よりも大きい場合、位置の前に置く数が後方にシフト
IFを(N - [ - J 1]> TEMP){
N- [J] = N - [ - J 1];
//第1、第2の数の数、第一の位置への電流の数、この旅行の最後に移動した
IF(J == 1){
N - [ - J 1] = TEMP;
ブレーク;
}
}他{//そうでない場合には、位置jに現在の数、この旅行の終わり
N- [J] = TEMP;
BREAK;
}
}
のSystem.out.println(Arrays.toStringの(N));
}
システム。 out.printlnを(Arrays.toString(N-)の);
}
}