Pagini recente » Cod sursa (job #428968) | Cod sursa (job #162514) | Cod sursa (job #1961041) | Economie | Cod sursa (job #2241504)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int const nmax = 500000;
int v[1 + nmax];//v1 v2
int vi[1 + nmax];
/*void interleave(int from1, int to1, int from2, int to2){
int from3 = from1;
int to3 = to2;
int i1 = from1; //se plimba prin v, de la from1 la to1
int i2 = from2; //se plimba prin v, de la from2 la to2
int i3 = from3; //se plimba prin vi, de la from3 la to3
while(i3 <= to3) {
if(i1 <= to1 && i2 <= to2) {
if(v[i1] < v[i2]) {
vi[i3] = v[i1];
i1++;
} else{
vi[i3] = v[i2];
i2++;
}
} else {
if(i1 > to1) {
vi[i3] = v[i2];
i2++;
} else {
vi[i3] = v[i1];
i1++;
}
} // O(n * log n)
i3++;
}*/
void interleave2(int from1, int to1, int from2, int to2){
int from3 = from1;
int to3 = to2;
int i1 = from1; //se plimba prin v, de la from1 la to1
int i2 = from2; //se plimba prin v, de la from2 la to2
int i3 = from3; //se plimba prin vi, de la from3 la to3
while(i3 <= to3) {
//if-uri care se ocupa de cazurile cand nu mai sunt gogosi intr-o tava
if(i1 <= to1 && i2 > to2) {
vi[i3] = v[i1];
i1++;
} else if(i1 > to1 && i2 <= to2) {
vi[i3] = v[i2];
i2++;
} else if(v[i1] < v[i2]) {
vi[i3] = v[i1];
i1++;
} else {
vi[i3] = v[i2];
i2++;
}
i3++;
}
for(int i = from3; i <= to3; i++) {
v[i] = vi[i];
}
}
for(int i = from3; i <= to3; i++) {
v[i] = vi[i];
}
}
void mergesort(int from, int to) {
if(from < to) {
int mid = (from + to) / 2;
mergesort(from, mid);
mergesort(mid+1, to);
interleave(from, mid, mid + 1, to);
}
}
int main() {
int n;
in >> n;
for(int i = 1; i <= n; i++) {
in >> v[i];
}
mergesort(1, n);
for(int i = 1; i <= n; i++) {
out << v[i] << " ";
}
return 0;
}