Pagini recente » Cod sursa (job #3201262) | Cod sursa (job #1712582)
#include<fstream>
#include<string.h>
#define MAXN 500005
using namespace std;
void merge(int *A, int left, int sep, int right) {
int C[MAXN];
int leftidx = left, rightidx = sep + 1, cidx = 0;
while (leftidx <= sep && rightidx <= right) {
if (A[leftidx] < A[rightidx]) {
C[++cidx] = A[leftidx];
leftidx++;
} else {
C[++cidx] = A[rightidx];
rightidx++;
}
}
while (leftidx <= sep) { C[++cidx] = A[leftidx++]; }
while (rightidx <= right) { C[++cidx] = A[rightidx++]; }
memcpy(A + left, C + 1, sizeof(int) * cidx);
}
void mergesort(int* A, int sz, int left, int right) {
//
if (left == right) {
return;
}
int middle = (left + right) / 2;
mergesort(A, sz, left, middle);
mergesort(A, sz, middle + 1, right);
merge(A, left, middle, right);
}
int main() {
int A[MAXN], n;
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> n;
for (int i = 1; i <= n; i++) {
f >> A[i];
}
mergesort(A, n, 1, n);
for (int i = 1; i <= n; i++) {
g << A[i] << " ";
}
return 0;
}