Cod sursa(job #796116)

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

#define Nmax 500001

int N, A[Nmax];

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

void mergesort(int A[], int left, int right) {
	if(left == right)
		return;
	int mid = (left+right)/2;
	mergesort(A,left,mid);
	mergesort(A,mid+1,right);
	merge(A,left,mid,right);
}

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