Pagini recente » Cod sursa (job #1608891) | Cod sursa (job #1722566) | Cod sursa (job #1844043) | Cod sursa (job #313876) | Cod sursa (job #1542647)
#include <iostream>
#include <cstdio>
using namespace std;
int v[500001];
int aux[500001];
void interclasare(int st, int dr){
int i, j, k, mij;
mij=st+(dr-st)/2;
i=st;
j=mij+1;
k=0;
while(i<=mij && j<=dr){
k++;
if(v[i]<=v[j])
aux[k]=v[i++];
else aux[k]=v[j++];
}
while(i<=mij)
aux[++k]=v[i++];
while(j<=dr)
aux[++k]=v[j++];
k=1;
for(int i=st; i<=dr; ++i)
v[i]=aux[k++];
}
void mergesort(int st, int dr){
if(st==dr)
return;
int m=st+(dr-st)/2;
mergesort(st, m);
mergesort(m+1, dr);
interclasare(st, dr);
}
int main()
{
FILE *fin=fopen("algsort.in", "r");
FILE *fout=fopen("algsort.out", "w");
int n;
fscanf(fin, "%d", &n);
for(int i=1; i<=n; ++i)
fscanf(fin, "%d", &v[i]);
mergesort(1, n);
for(int i=1; i<=n; ++i)
fprintf(fout, "%d ", v[i]);
return 0;
}