Pagini recente » Cod sursa (job #174507) | Cod sursa (job #221105) | Cod sursa (job #238009) | Cod sursa (job #1537529) | Cod sursa (job #3213056)
#include<bits/stdc++.h>
#pragma GCC optimization("Ofast")
using namespace std;
const int NMAX = 5e5 + 5;
int n;
void merge(int v[], int st, int mij, int dr)
{
int left_array[NMAX], right_array[NMAX];
for(int i = st, j = 1; i <= mij; i++, j++)
left_array[j] = v[i];
for(int i = mij + 1, j = 1; i <= dr; i++, j++)
right_array[j] = v[i];
int i = 1, j = 1, k = st - 1;
while(i <= mij - st + 1 && j <= dr - mij)
{
if(left_array[i] == right_array[j])
{
k++;
v[k] = left_array[i];
k++;
v[k] = right_array[j];
i++;
j++;
}
else if(left_array[i] < right_array[j])
{
k++;
v[k] = left_array[i];
i++;
}
else
{
k++;
v[k] = right_array[j];
j++;
}
}
while(i <= mij - st + 1)
{
k++;
v[k] = left_array[i];
i++;
}
while(j <= dr - mij)
{
k++;
v[k] = right_array[j];
j++;
}
}
void mergesort(int v[], int st, int dr)
{
if(dr <= st)
return;
int mij = (st + dr) / 2;
mergesort(v, st, mij);
mergesort(v, mij + 1, dr);
merge(v, st, mij, dr);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
cin >> n;
int v[NMAX];
for(int i = 1; i <= n; i++)
cin >> v[i];
mergesort(v, 1, n);
for(int i = 1; i <= n; i++)
cout << v[i] << " ";
}