Pagini recente » Cod sursa (job #2446353) | Cod sursa (job #3194425) | Cod sursa (job #1443221) | Cod sursa (job #895821) | Cod sursa (job #2200860)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
const int nmax = 5e5 + 5;
int n, v[nmax];
int L[nmax], R[nmax];
/*void mergev2(int v[], int st, int dr, int mij) {
int poz = st;
int i = st;
int j = mij + 1;
while(i <= mij || j <= dr) {
if(j > dr || (i <= mij && v[i] < v[j]) )
aux[poz] = v[i], i++;
else
aux[poz] = v[j], j++;
poz++;
}
for(i = st; i <= dr; i++)
v[i] = aux[i];
}*/
void merge(int v[], int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
for(int i = 1; i <= n1; ++i) {
L[i] = v[l + i - 1];
}
for(int i = 1; i <= n2; ++i) {
R[i] = v[m + i];
}
int i = 1, j = 1, k = l - 1;
while(i <= n1 && j <= n2) {
if(L[i] <= R[j]) {
v[++k] = L[i++];
} else {
v[++k] = R[j++];
}
}
while(i <= n1) {
v[++k] = L[i++];
}
while(j <= n2) {
v[++k] = R[j++];
}
}
void mergeSort(int v[], int l, int r) {
if(l >= r)
return;
int m = l + (r - l) / 2;
mergeSort(v, l, m);
mergeSort(v, m + 1, r);
merge(v, l, m, r);
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i) {
f >> v[i];
}
mergeSort(v, 1, n);
for(int i = 1; i <= n; ++i) {
g << v[i] << ' ';
}
f.close();
g.close();
return 0;
}