Pagini recente » Cod sursa (job #2334093) | Cod sursa (job #2661187) | Cod sursa (job #1561232) | Cod sursa (job #1303248) | Cod sursa (job #1606197)
#include <bits/stdc++.h>
#define Nmax 500005
using namespace std;
int N;
int D[Nmax];
void Partition(int li,int lf,int index, int &st, int &dr)
{
swap(D[index],D[lf]);
for(int i = li ; i < lf; ++i)
{
if(D[i] < D[lf])
swap(D[i], D[li++]);
if(D[i] > D[lf])
{
swap(D[i], D[lf--]);
swap(D[i--], D[lf]);
}
}
st = li;
for(int i = li; i < lf; ++i)
if(D[i] == D[lf])
swap(D[i], D[li++]);
swap(D[li],D[lf]);
dr = li;
}
void Quicks(int li,int lf)
{
if(li >= lf)
return;
int piv =li + rand() % (lf - li + 1), st,dr;
Partition(li,lf,piv,st,dr);
Quicks(li,st - 1);
Quicks(dr + 1, lf);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(int i = 1; i <= N; ++i)
scanf("%d",&D[i]);
srand(unsigned(time(0)));
Quicks(1,N);
for(int i = 1; i <= N; ++i)
printf("%d ",D[i]);
return 0;
}