Pagini recente » Cod sursa (job #2923331) | Cod sursa (job #1698746) | Cod sursa (job #2334474) | Cod sursa (job #124974) | Cod sursa (job #2232192)
#include <cstdio>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
#define N 500001
#define dim 8192
char ax[dim];
int pz;
inline void cit(int &x)
{
x = 0;
while(ax[pz] < '0' || ax[pz] > '9')
if(++pz == dim) fread(ax,1,dim,stdin),pz =0;
while(ax[pz] >= '0' && ax[pz] <= '9')
{
x = x * 10 + ax[pz] - '0';
if(++pz == dim) fread(ax,1,dim,stdin),pz = 0;
}
}
int a[N];
int n;
inline void quick(int a[], int l, int r)
{
if(l >= r) return;
int p = l + rand()%(r-l+1);
int v = a[p];
swap(a[p], a[r]);
int i , j = l-1;
for(i = l; i <= r; ++i)
if(a[i] <= v)
swap(a[i], a[++j]);
quick(a, l, j-1);
quick(a, j+1, r);
}
inline void quick2(int a[], int l, int r)
{
if(l >= r) return;
int p = l + rand()%(r-l+1);
int v = a[p];
swap(a[p], a[r]);
int i = l, j = r;
do
{
while(a[i] < v) ++i;
while(a[j] > v) --j;
if(i <= j)
swap(a[i++],a[j--]);
}while(i <= j);
quick2(a, l, i-1);
quick2(a, j+1, r);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
cit(n);
for(int i = 0; i < n; ++i)
cit(a[i]);
quick2(a, 0, n - 1);
for(int i = 0; i < n; ++i)
printf("%d ", a[i]);
printf("\n");
return 0;
}