Pagini recente » Cod sursa (job #946495) | Flux si cuplaj | Cod sursa (job #2975864) | Cod sursa (job #2102225) | Cod sursa (job #1273679)
/// Craciun Catalin
/// Algsort
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMax 500005
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int C[NMax];
int B[NMax];
void mergeS(int left, int right) {
int index = 1;
int indexLeft = left;
int indexRight = (left+right)/2+1;
while (indexLeft <= (left+right)/2 && indexRight <= right) {
if (C[indexLeft] < C[indexRight]) {
B[index] = C[indexLeft];
indexLeft++;
index++;
} else {
B[index] = C[indexRight];
indexRight++;
index++;
}
}
while (indexLeft <= (left+right)/2) {
B[index] = C[indexLeft];
indexLeft++;
index++;
}
while (indexRight <= right) {
B[index] = C[indexRight];
indexRight++;
index++;
}
int pos = 1;
for (int i=left;i<=right;i++, pos++) {
C[i] = B[pos];
}
}
void divide(int left, int right) {
if (left < right) {
int mij = (left + right)/2;
divide(left, mij);
divide(mij+1, right);
mergeS(left, right);
}
}
void read() {
f>>n;
for (int i=1;i<=n;i++)
f>>C[i];
}
void output() {
f>>n;
for (int i=1;i<=n;i++)
g<<C[i]<<' ';
}
int main() {
read();
divide(1, n);
output();
f.close(); g.close();
return 0;
}