Pagini recente » Cod sursa (job #358288) | Cod sursa (job #44066) | Cod sursa (job #74068) | Cod sursa (job #751785) | Cod sursa (job #3123250)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int N_MAX = 5e5;
int v[N_MAX], aux[N_MAX / 2];
void Merge(int b1, int e1, int b2, int e2) {
for(int i = b1; i <= e1; ++i)
aux[i - b1] = v[i];
int i1 = 0, i2 = b2, i = b1;
while(i1 <= e1 - b1 && i2 <= e2)
if(aux[i1] <= v[i2])
v[i++] = aux[i1++];
else
v[i++] = v[i2++];
while(i1 < e1 - b1 + 1)
v[i++] = aux[i1++];
}
void MergeSort(int begin, int end) {
int mid = begin + ((end - begin) >> 1);
if(mid > begin)
MergeSort(begin, mid);
if(end > mid + 1)
MergeSort(mid + 1, end);
Merge(begin, mid, mid + 1, end);
}
int main() {
int n;
fin >> n;
for(int i = 0; i < n; ++i)
fin >> v[i];
MergeSort(0, n - 1);
for(int i = 0; i < n; ++i)
fout << v[i] << ' ';
fout.put('\n');
fin.close();
fout.close();
return 0;
}