選択法によるソート


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

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

用例(selectSort-test.c

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

    for (i = 0; i < nmem - 1; i++) {
        k = i;
        for (j = i + 1; j < nmem; j++)
            if (asdes == 0) {
                if (data[j].key < data[k].key) k = j;
            } else {
                if (data[j].key > data[k].key) k = j;
            }
        if (k != i) 
swap(&data[k], &data[i]); } } static void swap(DATA *a, DATA *b){ DATA t; t.key = a->key; t.info = a->info; a->key = b->key; a->info = b->info; b->key = t.key; b->info = t.info; }
説明
選択ソートでは、まず全体を走査して最小のレコード(昇順の場合) を見つけ、それを最初のレコードと入れ換える。つぎに2つ目のレコード から最後まで走査してその中の最小のものを見つけ、2つ目のレコードと 入れ換える。このように最後のレコードまで繰り返して終了する。

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

関連関数
挿入ソートバブルソートシェルソートクイックソート