Pagini recente » Cod sursa (job #575521) | Cod sursa (job #2213309) | Cod sursa (job #1516501) | Cod sursa (job #85349) | Cod sursa (job #1789494)
#include <stdio.h>
#define N 500001
using namespace std;
int i,n,v[N];
void interclasare(int l, int m, int r)
{
int i(l), j(m+1), k(0), a[N];
while(k<=r-l)
{
if(j > r) a[++k] = v[i++];
else while((v[i] <= v[j]) && (k < r - l)) {if(i > m) break; a[++k] = v[i++];}
if(k > r-l) break;
if(i > m) a[++k] = v[j++];
else while((v[i] >= v[j]) && (k < r - l)) {if(j > r) break; a[++k] = v[j++];}
if(k > r-l) break;
}
k = 0;
for(i = l; i <=r; i++) v[i] = a[++k];
}
void merge_sort(int l, int r)
{
int m;
if(l < r)
{
m = (l + r) / 2;
merge_sort(l, m);
merge_sort(m+1, r);
interclasare(l, m, r);
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &v[i]);
merge_sort(1, n);
for(i = 1; i <= n; i++)
printf("%d ", v[i]);
return 0;
}