bubbleSort バブル法によるソート
void bubbleSort(DATA *data, int nmem, int asdes);
typedef struct { int key; /* 比較のキーとなるフィールド */ int info; /* その他のフィールド */ } DATA; data (入出力)データレコードの配列 nmem (入力) レコード配列の大きさ asdes (入力) 昇順・降順別、0:昇順, 1:降順
なし
void bubbleSort(DATA *data, int nmem, int asdes) { int i, j; static void swap(); for (i = 0; i < nmem - 1; i++) { for (j = nmem - 1; j >= i + 1; j--) if (asdes == 0) { if (data[j].key < data[j-1].key) swap(&data[j], &data[j-1]); } else { if (data[j].key > data[j-1].key) swap(&data[j], &data[j-1]); } } } 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つを入れ換える。この走査で、一番値の小さい(軽い)レコード が1番上に浮かびあがる。つぎに下から上2つ目のレコードまで走査して 隣り同士を必要に応じて入れ換えることにより、その中の最小のものが 上から2つ目のレコードに浮かびあがる。このように最後のレコードまで 繰り返して終了する。
利用するには、データ構造を実際の問題に合わせて修正する必要がある。