/* 第p要素を選ぶSELECTのプログラム例 */ #include #include #define N 500 /* The size of array. */ int select(int i, int j, int p, int *A); void bubblesort(int i, int j, int *A); void swap(int i, int j, int *A); int partition(int i, int j, int a, int *A); main() /* p番目の大きさの要素の選択のテストプログラム */ { int A[N]; int n, i, p, ap; FILE *file; file=fopen("selectdata", "r"); /* データファイルの読込 */ fscanf(file, "%d", &n); fscanf(file, "%d", &p); if(n>N) /* 配列サイズのチェック */ { printf("Illegal array size n = %d for N = %d\n", n, N); exit(1); } for(i=0; i=i+1; j--) if(A[j]=aを満たす */ { int l, r, k; l=i; r=j; /* lは左から、rは右から */ while(1) { while(A[l]=a) r=r-1; /* lとrの移動 */ if(l<=r) {swap(l, r, A); l=l+1; r=r-1;} /* A[l]とA[r]の交換 */ else break; /* 終了 */ } k=l; return(k); }