Pagini recente » Rating Grigorescu Stefan Dumitru (SteFUN) | Cod sursa (job #1514596) | Istoria paginii runda/pregatire_rapida/clasament | Cod sursa (job #2801869) | Cod sursa (job #352600)
Cod sursa(job #352600)
/*
* File: main.cpp
* Author: speedemon
*
* Created on October 2, 2009, 2:40 PM
*/
#include <fstream>
#include <cstdlib>
#include <iterator>
/*
*
*/
using namespace std;
ifstream in;
ofstream out;
unsigned *v;
inline void swap( int a, int b )
{
int aux=v[a];
v[a]=v[b];
v[b]=aux;
}
void downheap( int start, int end )
{
for( int root=2*start+1; root < end; )
{
if( root+1 < end && v[root+1] > v[root] ) ++root;
if( v[start] > v[root] ) return;
swap( start, root );
start=root;
root=2*start+1;
}
}
void HeapSort( int end )
{
for( int start=end/2-1; start >= 0; --start ) // make_heap()
downheap( start, end );
for( --end; end >= 0; --end )
{
swap( 0, end );
downheap( 0, end );
}
}
int main()
{int N,i;
in.open("algsort.in");
in>>N;
v=new unsigned[N];
for( i=0; i < N; ++i ) in>>v[i];
HeapSort( N );
out.open("algsort.out");
copy( v, v+N, ostream_iterator<int>( out, " ") );
delete[] v;
return EXIT_SUCCESS;
}