Pagini recente » Cod sursa (job #1457137) | Cod sursa (job #2891487) | Cod sursa (job #2387295) | Cod sursa (job #2965826) | Cod sursa (job #515713)
Cod sursa(job #515713)
#include<iostream>
#include<time.h>
#include<stdio.h>
using namespace std;
void Quick(int* t,int st,int dr) //Sortarea rapida (!)
{ int i=st,j=dr,w, piv = ( st + dr ) /2;
int x = dr - st + 1;
if( x > 50 )
{int piv1 = st + x % rand();
int piv2 = st + x % rand();
int piv3 = st + x % rand();
if( piv1 > piv2 ){
piv2 = piv1 ^ piv2 ^( piv2 = piv1 );
}
if( piv1 > piv3)
{
piv3 = piv1 ^ piv3 ^( piv3 = piv1 );
}
if( piv2 > piv3)
{
piv3 = piv2 ^ piv3 ^( piv3 = piv2 );
}
piv = piv2;
}
do {
while(t[i] < piv) i++;
while(t[j] > piv) j--;
if(i <= j) {w=t[i]; t[i]=t[j]; t[j]=w; i++; j--;}
}
while(j >= i);
if(st < j) Quick(t,st,j);
if(dr > i) Quick(t,i,dr);
}
int i,v[500001],n;
int main()
{
srand(time(0));
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++)
{
cin>>v[i];
}
Quick(v,1,n);
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
cin>>i;
}