void Exchange(int a[], int i, int j) { if (i != j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } int Partion(int a[], int begin, int end) { int i = begin - 1; int j = end + 1; int value = a[begin]; while (1) { do { i++; } while(a[i] < value); do { j--; } while(a[j] > value); if (i < j) { Exchange(a, i, j); } else { return j; } } } void Qsort(int a[], int begin, int end) { if (begin < end) { int j = Partion(a, begin, end); Qsort(a, begin, j); Qsort(a, j + 1, end); } }