Cod sursa(job #1737260)

Utilizator alexandru.rusuRusu Alexandru alexandru.rusu Data 3 august 2016 16:35:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n;
int x[500003];
int b[500003];

void Inter(int p, int m, int u)
{
	int k1 = p, k2 = m + 1, k3 = p;
	while (k1 <= m && k2 <= u)
	{
		if (x[k1]<x[k2])
		{
			b[k3] = x[k1];
			k1++;
		}
		else
		{
			b[k3] = x[k2];
			k2++;
		}
		k3++;
	}
	if (k1>m)
		for (int k = k2; k <= u; k++)
		{
			b[k3] = x[k];
			k3++;
		}
	else
		for (int k = k1; k <= m; k++)
		{
			b[k3] = x[k];
			k3++;
		}

	for (int i = p; i <= u; i++)
	{
		x[i] = b[i];
	}
}

void InsertSort(int p, int u) // bubble not insertSort
{
	int ok, i, aux;
	do {
		ok = 1;
		for (i = p; i < u; i++)
			if (x[i] > x[i + 1])
			{
				ok = 0;
				aux = x[i];
				x[i] = x[i + 1];
				x[i + 1] = aux;
			}
	} while (ok != 1);
}
void MergeSort(int p, int u)
{
	if (u - p <= 11) { InsertSort(p, u); }
	else
	{
		int k = (p + u) / 2;
		MergeSort(p, k);
		MergeSort(k + 1, u);
		Inter(p, k, u);
	}
}

int main()
{
	f >> n;
	for (int i = 1; i <= n; i++)
		f >> x[i];
	MergeSort(1, n);
	for (int i = 1; i <= n; i++)
	{
		g << x[i] << ' ';
	}
	return 0;
}