template<class T> void QuickSortLeft(T* x, int l, int u) { // Отбрасываем пустые и // одноэлементные массивы if (l >= u) { return; } T tmp; int m = l; for (int i = l+1; i <= u; i++) { if (x[i] < x[l]) { // делаем swap(++m, i) tmp = x[++m]; x[m] = x[i]; x[i] = tmp; } } // Делаем swap(l, m): // Без этого - алгоритм может войти // в бесконечную рекурсию tmp = x[l]; x[l] = x[m]; x[m] = tmp; // вызываем реккурсивно // для 2-х полученных областей QuickSortLeft(x, l, m-1); QuickSortLeft(x, m+1, u); }