template<class T> void QSort3(T* x, int l, int u) { if (l >= u) return; T t, tmp; int i,j; t = x[l]; i = l; j = u+1; while (1) { /* пропуск элементов справа и слева, чтобы не делать лишней работы */ do i++; while (i <= u && x[i] < t); do j--; while (x[j] > t); if (i > j) break; // Делаем swap(i, j): tmp = x[i]; x[i] = x[j]; x[j] = tmp; } // swap(l, j) tmp = x[l]; x[l] = x[j]; x[j] = tmp; QSort3(x, l, j-1); QSort3(x, j+1, u); }