Cod sursa(job #2051273)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 28 octombrie 2017 18:33:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

const int NMax = 5e5 + 5;
int b[NMax];


void Interclasare(int a[], int st, int mid, int dr)
{
	int i = st;
	int j = mid + 1;

	int k = 0;
	while(i <= mid and j <= dr) {
		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 <= dr) {
		b[++k] = a[j];
		++j;
	}
	
	k = 1;
	for(int i = st; i <= dr; ++i) {
		a[i] = b[k++];
	}
}

void MergeSort(int a[], int st, int dr)
{	
	if(st < dr) {
		int mid = (st + dr) / 2;
		MergeSort(a, st, mid);
		MergeSort(a, mid + 1, dr);
		Interclasare(a, st, mid, dr);
	}
}

int main()
{
	int N;
	f >> N;

	int a[NMax];
	for(int i = 1; i <= N; ++i) {
		f >> a[i];
	}

	MergeSort(a, 1, N);

	for(int i = 1; i <= N; ++i) {
		g << a[i] << " ";
	}

	return 0;
}