Cod sursa(job #2076473)

Utilizator biaiftimeIftime Bianca biaiftime Data 26 noiembrie 2017 17:25:19
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
int n;
int *v;
void Read(int *n)
{
    int i;
    fscanf(f,"%d ",n);
    v=(int *)malloc((*n+1)*sizeof(int));
    for(i=1;i<=*n;++i)
    fscanf(f,"%d",&v[i]);
}
void swap(int i,int j)
{
    int aux=v[i];
    v[i]=v[j];
    v[j]=aux;
}
//maxheapify
void Maxheapify(int x,int n)
{
    if(x<=n/2)
    {
    int poz;
    if(2*x==n)poz=2*x;
    else {
          if(v[2*x]>v[2*x+1])poz=2*x;
          else poz=2*x+1;
         }
    if(v[x]<v[poz]){swap(poz,x); Maxheapify(poz,n); }
    }
}
//cream Heapul
void Creare(int n)
{
    int i;
    for(i=n/2;i>=1;--i) Maxheapify(i,n);
}
void Print(int n)
{
    int i;
    for(i=1;i<=n;++i)fprintf(g,"%d ",v[i]);
}
void HeapSort(int n)
{
    int k=n;
    while(k>1){
                swap(1,k);
                --k;
                Maxheapify(1,k);}
}
int main()
{
    f=fopen("algsort.in","r");
    g=fopen("algsort.out","w");
    Read(&n);
    Creare(n);
    HeapSort(n);
    Print(n);
    return 0;
}