Pagini recente » Cod sursa (job #3165530) | Cod sursa (job #2663711) | Cod sursa (job #998954) | Cod sursa (job #1730178) | Cod sursa (job #2640794)
#include <iostream>
#include <vector>
#define nmax 100010
using namespace std;
int n;
int t[nmax];
void combine(int m, int l, int r)
{
vector <int> part;
int l1 = l;
int l2 = m + 1;
while (l1 <= m && l2 <= r)
{
if (t[l1] < t[l2]) part.push_back(t[l1++]); else
part.push_back(t[l2++]);
}
while (l1 <= m) part.push_back(t[l1++]);
while (l2 <= r) part.push_back(t[l2++]);
for (int i = 0, p = l; p <= r; p++, i++) t[p] = part[i];
}
void merge_sort(int l, int r)
{
if (l == r) return;
int m = (l + r) / 2;
merge_sort(l, m);
merge_sort(m + 1, r);
combine(m, l, r);
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> t[i];
merge_sort(1, n);
for (int i = 1; i <= n; i++) cout << t[i] << ' ';
return 0;
}