Cod sursa(job #799180)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 18 octombrie 2012 10:48:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>

#define Nmax 500002

int A[Nmax], N;

void intercls(int left, int mij, int right) {
	int B[Nmax], i, j, k;
	i = left;
	j = mij+1;
	k = 0;
	while(i<=mij && j<=right) {
		if(A[i] < A[j]) {
			B[++k] = A[i];
			i++;
		}
		else {
			B[++k] = A[j];
			j++;
		}
	}
	for(; i<=mij; i++)
		B[++k] = A[i];
	for(; j<=right; j++)
		B[++k] = A[j];
	for(k=1, i=left; i<=right; i++, k++)
		A[i] = B[k];
}

void merge_sort(int left, int right) {
	if(left == right)
		return;
	int mij = (left+right)/2;
	merge_sort(left,mij);
	merge_sort(mij+1,right);
	intercls(left,mij,right);
}

int main() {
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	
	scanf("%d",&N);
	for(int i=1; i<=N; i++)
		scanf("%d",&A[i]);
	
	merge_sort(1,N);
	
	for(int i=1; i<=N; i++)
		printf("%d ",A[i]);
	
	printf("\n");
	
	return 0;
}