Pagini recente » Cod sursa (job #1280261) | Cod sursa (job #52003) | Cod sursa (job #994891) | Cod sursa (job #2064133) | Cod sursa (job #3175370)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define N_MAX 500000
int v[N_MAX], seq1[N_MAX / 2], seq2[N_MAX / 2];
void mergeseq(int a, int mid, int b) {
// interclasare [a, mid] si (mid, b]
int i, size_a, size_b, pos_a, pos_b;
size_a = 0;
for(i = a; i <= mid; ++i) {
seq1[size_a++] = v[i];
}
size_b = 0;
for(i = mid + 1; i <= b; ++i) {
seq2[size_b++] = v[i];
}
pos_a = pos_b = 0;
for(i = a; i <= b; ++i) {
if(pos_a == size_a) {
v[i] = seq2[pos_b];
}else if(pos_b == size_b) {
v[i] = seq1[pos_a];
}else{
if(seq1[pos_a] < seq2[pos_b]) {
v[i] = seq1[pos_a];
++pos_a;
}else{
v[i] = seq2[pos_b];
++pos_b;
}
}
}
}
int mergesort(int a, int b) {
if(a == b) {
return 0;
}
mergesort(a, (a + b) / 2);
mergesort((a + b) / 2 + 1, b);
mergeseq(a, (a + b) / 2, b);
return 0;
}
int main()
{
int n, i;
fin >> n;
for(i = 0; i < n; ++i) {
fin >> v[i];
}
fin.close();
mergesort(0, n - 1);
for(i = 0; i < n; ++i) {
fout << v[i] << ' ';
}
fout.close();
return 0;
}