Cod sursa(job #379336)

Utilizator alexandru92alexandru alexandru92 Data 31 decembrie 2009 20:04:19
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on December 31, 2009, 7:28 PM
 */
#include <vector>
#include <fstream>
#include <iterator>

/*
 *
 */
using namespace std;
vector<int> v;
int size_threshold;
inline void swap( int x, int y )
{
    v[x]+=v[y];
    v[y]=v[x]-v[y];
    v[x]-=v[y];
}
void siftdown( int start, int end )
{
    int root=2*start+1;
    while( 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 heapify( int end )
{
    for( int start=end/2-1; start >=0; --start )
        siftdown( start, end-1 );
}
void HeapSort( int start, int end )
{
    heapify( end );
    for( end-=1; end > 1; --end )
        swap( 0, end ), siftdown( start, end-1 );
}
int main()
{
    ifstream in("algsort.in");
    in.ignore();
    copy( istream_iterator<int>(in), istream_iterator<int>(), back_inserter(v) );
    ofstream out("algsort.out");
    HeapSort( 0, v.size() );
    copy( v.begin(), v.end(), ostream_iterator<int>(out, " " ) );
    return 0;
}