Cod sursa(job #2509639)

Utilizator daria1234daria ghitescu daria1234 Data 14 decembrie 2019 14:01:13
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <algorithm>
#define MAXN 65

using namespace std;

void merge( int *a, int *b, int *c, int m, int n)
{
	int idx1=1, idx2=1, idx=1;
	while(idx1<=m || idx2<=n)
	{
		if(idx1>m)
			c[idx++]=b[idx2++];
		else if ( idx2>n)
			c[idx++]=a[idx1++];
		else
		{
			if(a[idx1]>b[idx2])
				c[idx++]=b[idx2++];
			else 
				c[idx++]=a[idx1++];
		}
	}
}

void mergesort( int *v, int *aux, int a, int b)
{
	if(a==b)
		return;
	int mij=(a+b)/2;
	int l1=mij-a+1, l2=b-mij;
	mergesort(v, aux, a, mij);
	mergesort(v, aux, mij+1, b);
	merge(v+a-1, v+mij, aux, l1, l2);
	for(int i=1; i<=b-a+1; i++)
		v[a+i-1]=aux[i];
}

int main ()
{
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	int v[500001], n, aux[500001];
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		scanf("%d", &v[i]);
	mergesort(v, aux, 1, n);
	for(int i=1; i<=n; i++)
		printf("%d ", v[i]);

	return 0;
	
}