Pagini recente » Cod sursa (job #232838) | Cod sursa (job #1461294) | Cod sursa (job #1824727) | Cod sursa (job #2172695) | Cod sursa (job #1717751)
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int N, i, v[500001], w[500001];
void mergesort(int a, int b)
{
if(a==b)
return;
mergesort(a, (a + b) / 2);
mergesort((a+b)/2+1, b);
w[0] = 0;
for (int p1 = a, p2 = (a + b) / 2 + 1; p1 <= (a + b) / 2 || p2 <= b; )
{
if (p2 > b || (v[p1] <= v[p2] && p1 <= (a + b) / 2))
{
w[++w[0]] = v[p1];
p1++;
continue;
}
if (p1 > (a + b) / 2 || (v[p1] > v[p2] && p2 <= b))
{
w[++w[0]] = v[p2];
p2++;
}
}
for (int i = 1; i <= w[0]; i++) {
v[a + i - 1] = w[i];
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
/*for (i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
//cout << i * j << " ";
//printf("%4d", i * j);
}
cout << endl;
}*/
cin>>N;
for(int i=1; i<=N; i++)
cin>>v[i];
mergesort(1,N);
for (int i = 1; i <= N; i++) {
cout << v[i] << " ";
}
return 0;
}