Cod sursa(job #1005987)

Utilizator alabala1vali smerica alabala1 Data 6 octombrie 2013 02:19:55
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
unsigned c[500000];
void insert(unsigned st, unsigned dr, unsigned*p)
{
	int c, j;
	for (unsigned i = st+1; i < dr;i++)
	if (*(p + i) < *(p + i - 1)){ c = *(p + i); j = i;
	while (j&&c < *(p + j - 1)){ *(p + j) = *(p + j - 1); j--; }
	*(p + j) = c;}
}
void merges(unsigned st, unsigned  dr, unsigned *p)
{
	unsigned m = (st + dr) / 2;
	if (dr - st + 1 <= 10){
		insert(st, dr, p); return;
	}
	else
	{
		merges(st, m, p);
		merges(m + 1, dr, p);
	}
	unsigned j=st,i=m+1,s=0;
	while (j <= m || i <= dr)
	{
		if (j > m){ c[s++] = *(p + i++); continue; }
		if (i > dr){ c[s++] = *(p + j++); continue; }
		if (*(p + j) > *(p + i))c[s++] = *(p + i++);
		else c[s++] = *(p + j++);
	}
	for (j = st, i = 0; i < s; i++, j++)*(p + j) = c[i];}
int main()
{
	unsigned  a[500000],n;
	std::ifstream f("algsort.in");
	f >> n;
	for (int i = 0; i < n; i++)f >> a[i];
	f.close();
	merges(0,n-1,a);
	std::ofstream g("algsort.out");
	for (int i = 0; i < n; i++)g<< a[i]<<" ";
	g.close();
}