Cod sursa(job #352600)

Utilizator alexandru92alexandru alexandru92 Data 2 octombrie 2009 16:27:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
/* 
 * 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;
}