/* 選択整列法 */ /* selection-sort.c */ #include #define N 100 void selection(int a[],int index[],int n); int main(void) { int n,i,a[N],index[N]; /* a[index[i]]がi番目のデータ */ for(i = 0;i < N;i++) index[i] = i; n = 0; while(scanf("%d",&a[n]) != EOF) n++; selection(a,index,n); /* 結果出力 */ for(i = 0;i < n;i++) printf("%5d",a[i]); printf("\n"); for(i = 0;i < n;i++) printf(" a[%d]",index[i]); printf("\n"); return 0; } void selection(int a[],int index[],int n) { int i,j,min,t,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; } t = a[min]; a[min] = a[i]; a[i] = t; t = index[min]; index[min] = index[i]; index[i] = t; /* 途中結果出力開始 */ for(j = 0;j < i;j++) printf(" "); for(j = i;j < n;j++) printf("%5d",a[j]); printf("\n"); /* 途中結果出力終了 */ } printf("比較回数 %3d\n",count); }