Pagini recente » Cod sursa (job #2883979) | Cod sursa (job #3197428) | Cod sursa (job #1463965) | Cod sursa (job #1507935) | Cod sursa (job #2274963)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500001;
int n, v[N];
void intercls (int v[], int st, int mij, int dr){
int n1 = mij - st + 1, n2 = dr - mij;
int v1[n1 + 2], v2[n2 + 2];
for(int i = 1; i <= n1; i ++)
v1[i] = v[st + i - 1];
for(int i = 1; i <= n2; i ++)
v2[i] = v[mij + i];
int i = 1, j = 1, k = st;
while(i <= n1 && j <= n2){
if(v1[i] <= v2[j])
v[k ++] = v1[i ++];
else
v[k ++] = v2[j ++];
}
while(i <= n1)
v[k ++] = v1[i ++];
while(j <= n2)
v[k ++] = v2[j ++];
}
void mergesort (int v[], int st, int dr){
if(st < dr){
int mij = (st + dr) / 2;
mergesort (v, st, mij);
mergesort (v, mij + 1, dr);
intercls (v, st, mij, dr);
}
}
void afisare (int v[]){
for(int i = 1; i <= n ;i ++)
g << v[i] << ' ';
}
int main()
{
f >> n;
for(int i = 1; i <= n; i ++)
f >> v[i];
mergesort (v, 1, n);
afisare (v);
return 0;
}