Pagini recente » Cod sursa (job #1848484) | Cod sursa (job #176538) | Cod sursa (job #1276115) | Cod sursa (job #2764998) | Cod sursa (job #767894)
Cod sursa(job #767894)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <algorithm>
#define f sorting_like_a_boss
const int maxn = 500010;
using namespace std;
int A[maxn];
inline void swap(int &a, int &b) {
int aux = a; a = b; b = aux;
}
inline int segment(int left, int right, int piv) {
swap(A[piv], A[right]);
int go = left;
for(int i = left; i < right; ++i)
if(A[i] < A[right]) {
swap(A[i], A[go]);
go += 1;
}
swap(A[go], A[right]);
return go;
}
inline void sorting_like_a_boss(int left, int right) {
if(left >= right) return ;
int pivOld = left + rand() % (right - left + 1);
int pivNew = segment(left, right, pivOld);
sorting_like_a_boss(left, pivNew - 1);
sorting_like_a_boss(pivNew + 1, right);
}
int N;
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> N;
srand(time(NULL));
for(int i = 1; i <= N; ++i)
fin >> A[i];
random_shuffle(A + 1, A + N + 1);
sorting_like_a_boss(1, N);
for(int i = 1; i <= N; ++i)
fout << A[i] << " " ;
return 0;
}