/* 選択整列法 */ /* selection-sort.c */ #include #define N 100 void selection(int *a,int n); int main(void) { int n,i,a[N]; n = 0; while(scanf("%d",&a[n]) != EOF) n++; selection(a,n); /* 結果出力 */ for(i = 0; i < n; i++) printf("%3d", *(a+i)); printf("\n"); return 0; } void swap(int *a, int x, int y) { int t= *(a+x); *(a+x) = *(a+y); *(a+y) = t; } void selection(int *a, int n) { int i, j, min, count=0; for (i = 0;i < n;i++){ min = i; for (j = i + 1;j < n;j++){ count++; if (*(a+j) < *(a+min)) min = j; } swap(a, min, i); /* 途中結果出力開始 */ for(j = 0;j < i;j++) printf(" "); for(j = i;j < n;j++) printf("%3d", *(a+j)); printf("\n"); /* 途中結果出力終了 */ } printf("比較回数 %3d\n",count); }