Pagini recente » Cod sursa (job #716306) | Cod sursa (job #2160804) | Cod sursa (job #523635) | Cod sursa (job #2629914) | Cod sursa (job #1294332)
#include <fstream>
#include <algorithm>
#define NMAX 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[NMAX],b[NMAX],N;
void merge(int sir[], int res[], int S, int F)
{
int mid=S+(F-S)/2+1,piv=mid;
int k=S-1;
while(S<mid && piv<=F)
{
while(sir[S]<=sir[piv] && S<mid)
res[++k]=sir[S++];
while(sir[piv]<sir[S] && piv<=F)
res[++k]=sir[piv++];
}
while(S<mid) res[++k]=sir[S++];
while(piv<=F) res[++k]=sir[piv++];
for(int i=F-k;i<=F;i++)
sir[i]=res[i];
}
void mergesort(int sir[],int res[],int S,int F)
{
int mid;
mid=S+(F-S)/2;
if(F-S>=1)
{
mergesort(sir,res,S,mid);
mergesort(sir,res,mid+1,F);
merge(sir,res,S,F);
}
}
int main()
{
int i;
f>>N;
for(i=1;i<=N;i++)
f>>a[i];
mergesort(a,b,1,N);
for(i=1;i<=N;i++)
g<<a[i]<<' ';
}