Cod sursa(job #1712582)

Utilizator contnouAndrei Pavel contnou Data 3 iunie 2016 04:48:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#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;
}