Pagini recente » Cod sursa (job #1280502) | Cod sursa (job #1459376) | Cod sursa (job #2097582) | Cod sursa (job #2591046) | Cod sursa (job #1243517)
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
using namespace std;
int a[500002];
int chosePivot(int l, int r){
if (r - l <= 2)
return (l + r) / 2;
int d = (rand() % (r - l + 1)) + l;
int b = (rand() % (r - l + 1)) + l;
int c = (rand() % (r - l + 1)) + l;
if (a[d] >= a[b] && a[b] >= a[c])
return b;
else if (a[b] >= a[d] && a[d] >= a[c])
return d;
return c;
}
int Partition(int l, int r)
{
int pind=chosePivot(l,r);
int p=a[pind];
int i,j=l-1;
for(i=l;i<=r;i++)
{
if(a[i]<p)
{
swap(a[i],a[++j]);
if(j==pind) pind=i;
}
}
swap(a[pind],a[j+1]);
return j+1;
}
void quicksort(int l, int r)
{
if(l<r)
{
int p=Partition(l,r);
quicksort(l,p-1);
quicksort(p+1,r);
}
}
int main()
{
int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
srand(time(NULL));
int n;
cin>>n;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
}