Pagini recente » Cod sursa (job #1238196) | Cod sursa (job #2150866) | Cod sursa (job #1797842) | Cod sursa (job #1247295) | Cod sursa (job #311242)
Cod sursa(job #311242)
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> a;
int n,i,x;
void Inter(int st,int dr)
{
if(st<dr)
{
int mij=(st+dr)/2,j;
Inter(st,mij);
Inter(mij+1,dr);
vector <int> aux;aux.resize(dr-st+2);
merge(a.begin()+st,a.begin()+mij+1,a.begin()+mij+1,a.begin()+dr+1,aux.begin());
for(i=st,j=0;i<=dr;i++)
a[i]=aux[j++];
}
}
void QSort(int st,int dr)
{
int i=st,j=dr,aux=a[(st+dr)/2];
do
{
while(i<=j&&a[i]<aux) i++;
while(i<=j&&a[j]>aux) j--;
if(i<=j) swap(a[i++],a[j--]);
}while(i<=j);
if(i<dr) QSort(i,dr);
if(st<j) QSort(st,j);
}
inline void Cout(int x)
{
printf("%d ",x);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
a.push_back(x);
}
if(n>200000)
QSort(0,n-1);
else
{
nth_element(a.begin(),a.begin()+n/2,a.end());
Inter(0,n-1);
}
for_each(a.begin(),a.end(),Cout);
printf("\n");
return 0;
}