挿入法によるソート


関数名
insertSort  挿入法によるソート
形式
void insertSort(DATA *data, int nmem, int asdes);
引数
typedef struct {
    int key;        /* 比較のキーとなるフィールド */
    int info;       /* その他のフィールド */
} DATA;

data   (入出力)データレコードの配列
nmem   (入力) レコード配列の大きさ
asdes  (入力) 昇順・降順別、0:昇順, 1:降順
関数値
なし
注意事項

用例(insertSort-test.c

プログラム(insertSort.c
void insertSort(DATA *data, int nmem, int asdes)
{
    int i, j, k;
    DATA t;

    for (i = 1; i < nmem; i++) {
        t.key = data[i].key;
        t.info = data[i].info;
        for (j = i - 1; j >= 0; j--)
            if (asdes == 0) {
                if (data[j].key > t.key) {
                    data[j+1].key = data[j].key;
                    data[j+1].info = data[j].info;
                } else break;
            } else {
                if (data[j].key < t.key) {
                    data[j+1].key = data[j].key;
                    data[j+1].info = data[j].info;
                } else break;
            }
        data[j+1].key = t.key;
        data[j+1].info = t.info;
    }
}
説明
挿入ソートでは、すでにソート済のレコードに新しいレコードを 正しい場所に挿入する。つまり、最初の2つのレコードについてまず入 れ換えにより正しい順序にする。つぎに、3つ目のレコードを前の2つの レコードと比較して、必要に応じて入れ換えを行う。これで、3つのレ コードが正しい順序になる。このように最後のレコードまで繰り返す。

挿入ソートは人間のよくやるソート法であり、ブリッジでカードを並べ るときにもよく使う方法である。

本関数を利用するには、データ構造を実際の問題に合わせて修正する 必要がある。

関連関数
選択ソートバブルソートシェルソートクイックソート