Pagini recente » Cod sursa (job #1546985) | Cod sursa (job #946960) | Cod sursa (job #2071056) | Monitorul de evaluare | Cod sursa (job #1584051)
#include <bits/stdc++.h>
#define Nmax 500005
#define DIM 666013
char buffer[DIM];
int pz = DIM - 1;
void Read(int &A)
{
A = 0;
while('0' > buffer[pz] || buffer[pz] > '9')
if(++pz == DIM)
fread(buffer,1,DIM,stdin),pz = 0;
while('0' <= buffer[pz] && buffer[pz] <= '9')
{
A = A * 10 + buffer[pz] - 48;
if(++pz == DIM)
fread(buffer,1,DIM,stdin), pz = 0;
}
}
using namespace std;
int A[Nmax],N;
void Read()
{
Read(N);
for(int i = 1; i <= N; ++i)
Read(A[i]);
srand(unsigned(time(0)));
}
int Partition(int li,int lf,int piv)
{
swap(A[lf],A[piv]);
for(int i = li; i < lf; ++i)
if(A[i] <= A[lf])
swap(A[i],A[li++]);
swap(A[li],A[lf]);
return li;
}
void Quicksort(int li,int lf)
{
if(li >= lf)
return;
int piv = li + rand() % (lf - li + 1),pos;
pos = Partition(li,lf,piv);
Quicksort(li,pos-1);
Quicksort(pos+1,lf);
}
void Print()
{
for(int i = 1; i <= N; ++i)
printf("%d ",A[i]);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
Read();
Quicksort(1,N);
Print();
return 0;
}