Cでの直接挿入ソート++

直接挿入ソート(並び替え挿入)の基本的な考え方は次のとおりです。レコードがソートされるたびに、キーワードの大きさに応じて挿入が完了するまでのすべてのレコードまで、順序付けられたシーケンスでの放電位置の前に挿入されています。

 

アレイが設定されている[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])。
}

 

公開された13元の記事 ウォンの賞賛9 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_38198952/article/details/104445220