template <class T> inline void QS(T *item, long n) { T pivot, tE; long l, r, i; while(n > 1) { r = n-1; l = 1; i = r / 2; pivot = item[i]; item[i] = item[0]; while (1) { while (pivot > item[l] && l < r) l++; while (pivot <= item[r] && r >= l) r--; if (l >= r) break; tE = item[l]; item[l] = item[r]; item[r] = tE; r--; l++; } item[0] = item[r]; item[r] = pivot; if (n < 3) return; i = n - r - 1; if (r > i) { QS(item + r + 1, n - r - 1); n = r; } else { QS(item, r); item += r + 1; n = i; } } }
No comments:
Post a Comment