Pagini recente » Cod sursa (job #2730153) | Cod sursa (job #558056) | Cod sursa (job #1369306) | Cod sursa (job #2046053) | Cod sursa (job #2013542)
#include <bits/stdc++.h>
using namespace std;
FILE *F=fopen("algsort.in", "r"), *G=fopen("algsort.out", "w");
int n, v[500005];
void merge_sort(int st, int mij, int dr)
{
int i = st, j = mij+1, k = 0, w[500005];
while(i <= mij && j <= dr)
if(v[i] >= v[j])
w[++ k] = v[j], j++;
else
w[++ k] = v[i], i++;
while(i <= mij) w[++ k] = v[i], i++;
while(j <= dr) w[++ k] = v[j], j++;
for(i = 1; i <= k; ++ i)
v[st+i-1] = w[i];
}
void Merge(int st, int dr)
{
if(st < dr)
{
Merge(st, (st+dr)/2);
Merge((st+dr)/2+1, dr);
merge_sort(st, (st+dr)/2, dr);
}
}
int main()
{
fscanf(F, "%d ", &n);
for(int i = 1; i <= n; ++i) fscanf(F, "%d ", &v[i]);
Merge(1, n);
for(int i = 1; i <= n; ++i) fprintf(G, "%d ", v[i]);
return 0;
}