Cod sursa(job #260018)

Utilizator marinMari n marin Data 16 februarie 2009 12:52:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <stdio.h>
#define DIM 500001

int n,i;
int v[DIM];


void cre(int *v, int n);
void corect(int poz, int *v, int n);
void s(int *v, int n) ;




int main(){
  FILE *f = fopen("algsort.in","r");
  fscanf(f,"%d",&n);
  for (i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);
  fclose(f);

  s(v,n);

  FILE *g = fopen("algsort.out","w");
  for (i=1;i<=n;i++)
    fprintf(g,"%d ",v[i]);
  fclose(g);
  return 0;

}



void cit(int *v, int &n){
  int i;
  FILE *f = fopen("date.in","r");
  fscanf(f,"%ld",&n);
  for (i=1;i<=n;i++)
    fscanf(f,"%ld",&v[i]);
  fclose(f);
}


void cre(int *v, int n){
  int i,aux,c,p;
  for (i=2;i<=n;i++) {
    c = i;
    p = i>>1;
    while ((p)&&(v[c]>v[p])) {
      aux = v[c];
      v[c] = v[p];
      v[p] = aux;
      c = p;
      p = p>>1;
    }
  }
}

void corect(int poz, int *v, int n){
  int aux,p,c;
  p = poz;
  c = p<<1;
  while (c<=n) {
    if ((c+1<=n) && (v[c+1]>v[c]))
      c++;
    if (v[c]>v[p]) {
      aux = v[c];
      v[c] = v[p];
      v[p] = aux;
      p = c;
      c = p<<1;
    } else break;
  }

}

void s(int *v, int n) {
  int i,aux,p,c;
  cre(v,n);
  for (i=n;i>1;i--) {
    aux = v[1];
    v[1] = v[i];
    v[i] = aux;
    corect(1,v,i-1);
  }
}