Cod sursa(job #978572)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 29 iulie 2013 00:48:23
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>

using namespace std;

struct btreenode
{
    btreenode *leftchild ;
    int data;
    short int nr;
    btreenode *rightchild ;
} ;

void adauga ( btreenode *&, int ) ;
void inorder ( btreenode * ) ;

int *v = new int[500002];

ofstream g("algsort.out");

int main( )
{
    btreenode *bt = NULL;

    ifstream f("algsort.in");

    int n, a;

    f >> n;

    for ( int i = 0; i < n; i++ )
            f >> v[i];

     random_shuffle ( v, v + n - 1 );
     random_shuffle ( v, v + n - 1 );

     for ( int i = 0; i < n; i++ )
            adauga(bt,v[i]);

    inorder(bt);
}

void adauga ( btreenode *&sr, int num )
{
    if ( sr == NULL )
    {
        sr = new btreenode;

        sr->leftchild = NULL ;
        sr->data = num ;
        sr->nr = 1;
        sr->rightchild = NULL ;
    }
    else
    {
        if ( num == sr->data )
                sr->nr++;
        else
            if ( num < sr->data )
                adauga (  sr->leftchild, num ) ;
            else
                adauga ( sr->rightchild, num ) ;
    }
}

void inorder ( btreenode *sr )
{
    if ( sr != NULL )
    {
        inorder ( sr -> leftchild ) ;

        while( sr->nr > 0 )
        {
            g << sr -> data << " ";
            sr->nr--;
        }
        inorder ( sr -> rightchild ) ;
    }
}