Pagini recente » Cod sursa (job #233233) | Cod sursa (job #1145659) | Cod sursa (job #7792) | Cod sursa (job #1892057) | Cod sursa (job #2868599)
#include <fstream>
#include <vector>
const int NMAX = 500000;
std::ifstream f("algsort.in");
std::ofstream g("algsort.out");
void merge(std::vector<int>& v, int st, int mij, int dr){
int i;
std::vector<int> a, b;
for(i = mij; i >= st; -- i)
a.push_back(v[i]);
for(i = dr; i >= mij + 1; -- i)
b.push_back(v[i]);
i = st;
while(a.size() > 0 && b.size() > 0){
if(a[a.size() - 1] <= b[b.size() - 1]){
v[i ++] = a[a.size() - 1];
a.pop_back();
} else {
v[i ++] = b[b.size() - 1];
b.pop_back();
}
}
while(a.size()){
v[i ++] = a[a.size() - 1];
a.pop_back();
}
while(b.size()){
v[i ++] = b[b.size() - 1];
b.pop_back();
}
}
void merge_sort(std::vector<int>& v, int st, int dr){
if(st >= dr)
return;
int mij = st + (dr - st) / 2;
merge_sort(v, st, mij);
merge_sort(v, mij + 1, dr);
merge(v, st, mij, dr);
}
int main(){
int n, i, x;
std::vector<int> v;
f >> n;
for(i = 0; i < n; i ++){
f >> x;
v.push_back(x);
}
merge_sort(v, 0, n - 1);
for(auto x: v)
g << x << " ";
return 0;
}