Pagini recente » Cod sursa (job #2087113) | Cod sursa (job #1315470) | Cod sursa (job #1003075) | Cod sursa (job #1305017) | Cod sursa (job #3347884)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500001];
void combine ( int st, int dr )
{
int mij = ( st + dr ) / 2;
int l1 = mij - st + 1, l2 = dr - mij;
vector <int> left(l1), right(l2);
for ( int i = 0; i < l1; i ++ )
left[i] = v[st + i];
for ( int i = 0; i < l2; i ++ )
right[i] = v[mij + 1 + i];
int i = 0, j = 0;
int k = st;
while ( i < l1 && j < l2 )
{
if ( left[i] <= right[j] )
v[k ++] = left[i ++];
else v[k ++] = right[j ++];
}
while ( i < l1 )
v[k ++] = left[i ++];
while ( j < l2 )
v[k ++] = right[j ++];
}
void mergesort ( int st, int dr )
{
if ( st >= dr )
return;
int mij = ( st + dr ) / 2;
mergesort ( st, mij );
mergesort ( mij + 1, dr );
combine ( st, dr );
}
int main()
{
int n;
f >> n;
for ( int i = 1; i <= n; i ++ )
f >> v[i];
mergesort ( 1, n );
for ( int i = 1; i <= n; i ++ )
g << v[i] << " ";
return 0;
}