Cod sursa(job #484240)

Utilizator MKLOLDragos Ristache MKLOL Data 12 septembrie 2010 23:05:16
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include<stdio.h>
#include<stdlib.h>
#define BUFFER_SIZE 8192
#include<algorithm>
#define Nmax 503030
int N,x;
using namespace std;
struct nod
{
    int val;
    nod *st,*dr;
} *bst,*NIL;

char buff[BUFFER_SIZE];
int buffIt;
FILE *inputFile = fopen("algsort.in", "r");

inline int getNumber() {
  int ret = 0;

  while (buff[buffIt] < '0' || buff[buffIt] > '9')
    if (++buffIt == BUFFER_SIZE)
      fread(buff, BUFFER_SIZE, 1, inputFile),
      buffIt = 0;

  while (buff[buffIt] >= '0' && buff[buffIt] <= '9') {
    ret = ret * 10 + buff[buffIt] - '0';

    if (++buffIt == BUFFER_SIZE) {
      buffIt = 0;
      fread(buff, BUFFER_SIZE, 1, inputFile);
    }
  }


  return ret;
}


typedef struct nod nod;
int v[Nmax];
nod* insert(nod* &p,int k)
{
      if (p == NIL)
      {       nod* a=new nod;
              p=a;
              p->val = k,p->st = p->dr = NIL;

              return p;
      }




        if(p->val < k)
        {
            return insert(p->dr,k);

        }
        else
        {
            return insert(p->st,k);
        }






}
void parcurge(nod *p)
{
    if(p==NULL)
    return;
    parcurge(p->st);
    printf("%d ",p->val);
    parcurge(p->dr);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
N=getNumber();

for(int i=1;i<=N;++i)
    {
        v[i]=getNumber();
    }
    random_shuffle(v+1,v+N+1);
    random_shuffle(v+1,v+N+1);
   // random_shuffle(v+1,v+N+1);
    for(int i=1;i<=N;++i)
    {
        insert(bst,v[i]);
    }

parcurge(bst);
}