template<class T> void QuickSortCenter(T* x, long N) { long i = 0, j = N; // начальные значения T temp, p; p = x[ N>>1 ]; // выбираем середину // процедура разделения do { while (x[i] < p) i++; while (x[j] > p) j--; if (i <= j) { temp = x[i]; x[i] = x[j]; x[j] = temp; i++; j--; } } while (i <= j); // рекурсивные вызовы, если есть, что сортировать if ( j > 0 ) QuickSortCenter(x, j); if ( N > i ) QuickSortCenter(x+i, N-i); }