#include #include #include #include #define N 26 /* ソートするものの個数 */ #define MAX 99 /* 数値データは 0 ... MAX */ #define swap(I,J) { int tmp = a[(I)]; a[(I)] = a[(J)]; a[(J)] = tmp; } int myrand(int max); void print(int lo, int pivot, int hi); void sort(int lo, int hi); int a[N]; main() { int i; srand((unsigned)time(NULL)); /* 現在時刻で乱数の種を初期化 */ for (i=0; i= hi) { /* lo >= hi のときは何もしなくてよい */ return; } mi = (lo + hi) / 2; pivot = a[mi]; /* これを pivot に選ぶ理由は特にない */ i = lo; j = hi; /* 外側の while の各くりかえしの最初と最後では「k < i ならば */ /* a[k] <= pivot」「j < k ならば a[k] >= pivot」が成り立つことに注意 */ while (i <= j) { while (a[i] < pivot) { i++; } while (a[j] > pivot) { j--; } if (i <= j) { swap(i, j); i++, j--; } } print(lo, pivot, hi); /* 確認のため印字 */ sort(lo, j), sort(i, hi); }