Pagini recente » Cod sursa (job #1420179) | Statistici victor (nokeno99) | Diferente pentru autumn-warmup-2007/solutii/runda-2 intre reviziile 49 si 56 | Profil natalia00 | Cod sursa (job #1175115)
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std ;
const char *FIN = "algsort.in", *FOU = "algsort.out" ;
vector < int > V ;
int N, cnt;
template <class Iter>
inline Iter SelectPivot(Iter begin, Iter end) {
advance(begin, distance(begin, end) / 2);
return begin;
}
template <class Iter, class Cmp>
void QuickSort(Iter begin, Iter end, Cmp less) {
Iter left = begin;
Iter right = end;
--right;
if (left >= right) return;
Iter pivot = SelectPivot(left, right);
auto val = *pivot;
//std::swap(*pivot, *right);
//Iter pivot_position = left;
while ( left <= right ) { ++cnt;
for ( ; *left < val; ++left ) ;
for ( ; *right > val; --right ) ;
if ( left <= right ) {
std :: swap ( *left, *right ) ;
++left, --right;
}
}
QuickSort(begin, ++right, less);
QuickSort(left, end, less);
}
// 3669777
template <class It, class Cmp>
inline void Sort(It First, It Last, Cmp FCmp) {
QuickSort(First, Last, FCmp);
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
scanf ( "%d", &N ) ;
for ( int i = 0, x; i < N; ++i ) {
scanf ( "%d", &x ) ;
V.push_back ( x ) ;
}
Sort(V.begin(), V.end(), [](const int a, const int b) {
return a < b;
});
freopen ( FOU, "w", stdout ) ;
for ( int i = 0; i < N; ++i ) {
printf ( "%d ", V[i] ) ;
}
//fprintf(stderr, "\n%d\n", cnt);
}