Pagini recente » Cod sursa (job #2833668) | Cod sursa (job #1572709) | Cod sursa (job #1512818) | Cod sursa (job #422972) | Cod sursa (job #1175091)
# 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(begin, end);
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;
}
}
/*for (; left != right; ++left) { ++cnt;
if (*left < val) {
std::swap(*left, *pivot_position++);
}
}*/
//std::swap(*pivot_position, *right);
//right = pivot_position;
//++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, "%d\n", cnt);
}