Pagini recente » Cod sursa (job #2505802) | Cod sursa (job #2370463) | Cod sursa (job #3214279) | Cod sursa (job #2683206) | Cod sursa (job #2391235)
#include <bits/stdc++.h>
#define NMAX 500001
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N, V[NMAX];
void interclasare(int *A, int st, int m, int dr) {
int i = st, j = m + 1, k = 0;
int *B = new int[NMAX];
while (i <= m and j <= dr) {
if (A[i] < A[j]) {
B[++k] = A[i++];
} else {
B[++k] = A[j++];
}
}
while (i <= m) {
B[++k] = A[i++];
}
while (j <= dr) {
B[++k] = A[j++];
}
for (int i = st; i <= dr; ++i) {
A[i] = B[i - st + 1];
}
delete B;
}
void merge_sort(int *A, int st, int dr) {
if (st < dr) {
int m = (st + dr ) / 2;
merge_sort(A, st, m);
merge_sort(A, m + 1, dr);
interclasare(A, st, m, dr);
}
}
int main() {
fin >> N;
for (int i = 1; i <= N; ++i) {
fin >> V[i];
}
merge_sort(V, 1, N);
for (int i = 1; i <= N; ++i) {
fout << V[i] << ' ';
}
fout << '\n';
fin.close();
fout.close();
return 0;
}