直接挿入ソート(並び替え挿入)の基本的な考え方は次のとおりです。レコードがソートされるたびに、キーワードの大きさに応じて挿入が完了するまでのすべてのレコードまで、順序付けられたシーケンスでの放電位置の前に挿入されています。
アレイが設定されている[0 ... N-1]。
1.最初に、順序付けられた、不規則領域への領域から[0] [1..nの-1]です。だから私は= 1という
2. [i]が現在の注文[0 ... I-1] [0 ... I]に形成されて組み込まれた領域は、間隔命じました。
3. I ++と私== N-1まで繰り返すステップ。ソートが行われます。
以下を示す(昇順で)定義に厳密に従って書かれたコード:
Insertsort1ボイド(INT []、INT N-)
{
int型I、J、K;
(。; I <N-I ++ I = 1)のための
{
// [0 ... I -の前に[I]であります適切な場所を見つけるために1]間隔
のためには、(私はJ = - 1と、J> = 0; J)
IF([J] <[I])
ブレーク;
//このような適切な見つけること位置
(J = I - 1!)IF
{
// [i]は大きなデータセットバックより
INTのTEMP = [I]、
のために(私はKが= - 1; K> J; K--)
A [K + 1] = A [K];
// A [i]の上の位置に
A [K + 1] = TEMP;
}
}
}
このコードは長すぎる、それは明らかに十分ではありません。今では書き換えられ、検索後のデータとは、この2つのステップが組み合わされて動きます。すなわち、各時間A [i]がA最初前データ[I-1]、および[I]> [I-1] [0 ... i]の順序付けされ、何の調整を説明していない場合。そうでなければ、そうJ = I-1、TEMP = [I]。次いで、データしばらく[j]が前後検索を移動させながら、ときにデータ[J] <[i]の停止温度と時間で[J + 1]に。
ボイドInsertsort2([]、INT N INT)
{
int型I、Jと、
(I ++; I <N iは= 1)のための
([I] <[I - 1])であれば
{
int型のTEMP = [I]。
ため(J = - 1; J> = 0 && [J]> TEMP; j--)
[J + 1] [j]を=。
[J + 1] = TEMP。
}
}
再び[j]は[0 ... J-1]の前に挿入された方法は、間隔を書き換える代わりに、データ交換のシフトデータを注文用います。[J]前データ[J-1]> [j]の場合、[J-1] <= [Jまで、j-- [J]と[J-1]とを交換]。これはまた、新しいデータ間隔を組み込むための新しい秩序を達成することができます。
ボイドInsertsort3([]、INT N INT)
{
int型I、Jと、
ため(I 1 =; I <nは、I ++)
のための(J = - 1; J> = 0 [J] &&は> [J + 1]; j--)
スワップ([J]、[ J + 1])。
}