Pagini recente » Cod sursa (job #602271) | Cod sursa (job #1716059) | Cod sursa (job #222328) | Cod sursa (job #244974) | Cod sursa (job #971295)
Cod sursa(job #971295)
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int NMax = 500100;
const int oo = 0x3f3f3f3f;
int N;
vector<int> A(NMax), norm;
void readVector(vector<int> &, int);
void sortVector(vector<int> &, int, int);
void writeVector(vector<int> &, int);
int main() {
#ifdef INFOARENA
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
#endif
scanf("%i", &N);
readVector(A, N);
sortVector(A, 1, N);
writeVector(A, N);
}
void readVector(vector<int> &A, int length) {
for (int i = 1; i <= length; i++)
scanf("%i", &A.at(i));
}
void sortVector(vector<int> &A, int left, int right) {
if (left == right)
return ;
int middle = left + (right - left) / 2;
sortVector(A, left, middle);
sortVector(A, middle + 1, right);
int p1 = left, p2 = middle + 1;
norm.clear();
while (p1 <= middle || p2 <= right) {
int value1, value2;
if (p1 <= middle)
value1 = A.at(p1);
else value1 = oo;
if (p2 <= right)
value2 = A.at(p2);
else value2 = oo;
if (value1 < value2) {
norm.push_back(value1); p1++;
} else {
norm.push_back(value2); p2++;
}
}
for (int i = left; i <= right; i++)
A.at(i) = norm.at(i - left);
}
void writeVector(vector<int> &A, int length) {
for (size_t i = 1; i <= length; i++)
printf("%i ", A.at(i));
}