Cod sursa(job #1816423)

Utilizator aaether14Dinescu Stefan Cristian aaether14 Data 26 noiembrie 2016 14:19:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <algorithm>


unsigned int v[1<<19];
unsigned int n;


void heap_insert(int to_insert)
{

	while(v[to_insert] > v[to_insert/2])
	{
		std::swap(v[to_insert],v[to_insert/2]);
		to_insert/=2;
	}

}



void heap_sort(int to_sort)
{
	

	std::swap(v[0], v[n-to_sort-1]);	
	int child_index = 1;
	while (child_index < n-to_sort-1)
	{
		if (child_index < n-to_sort-2 && v[child_index+1] > v[child_index])
			++child_index;
		if (v[child_index] > v[child_index/2])
			std::swap(v[child_index/2], v[child_index]);
		child_index*=2;
	}



}


int main()
{

	std::ifstream fin("algsort.in");
	std::ofstream fout("algsort.out");


	fin>>n;
	for (unsigned int i = 0; i < n; ++i)
		fin>>v[i];
	for (unsigned int i = 0; i < n; ++i)
		heap_insert(i);
	for (unsigned int i = 0; i < n; ++i)
		heap_sort(i);
	for (unsigned int i = 0; i < n; ++i)
		fout << v[i] << " ";

	

	fout.close();
	fin.close();

}