Pagini recente » Cod sursa (job #2080231) | Cod sursa (job #1315079) | Cod sursa (job #1853155) | Cod sursa (job #1907170) | Cod sursa (job #2076473)
#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;
}