各パスにおける比較・交換の走査を、末尾側からではなく先頭側から行うことによってもソートできる。ただし、その場合、最大要素が末尾側へと移動する。 そのように変更したプログラムを作成せよ。 |
/* 演習6-1 単純交換ソート(先頭側から走査) */ #include <stdio.h> #define swap(type, x, y) do {type t = x; x = y; y = t; } while (0) /*--- 単純交換ソート ---*/ void bubble(int a[], int n) { int i, j; for (i = n - 1; i > 0; i--) { for (j = 0; j < i; j++) if (a[j] > a[j + 1]) swap(int, a[j], a[j + 1]); } } int main(void) { int i; int x[7]; int nx = sizeof(x) / sizeof(x[0]); printf("%d個の整数を入力せよ。\n", nx); for (i = 0; i < nx; i++) { printf("x[%d] : ", i); scanf("%d", &x[i]); } bubble(x, nx); /* 配列xを単純交換ソート */ puts("昇順にソートしました。"); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); return (0); }