Pagini recente » Cod sursa (job #1457455) | Cod sursa (job #2750545) | Cod sursa (job #2045065) | Cod sursa (job #2314754) | Cod sursa (job #2058342)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500001
//This will be a maxHEAP
void addtoHEAP( int HEAP[], int *dimHEAP, int x )
{
*dimHEAP = *dimHEAP + 1;
HEAP[*dimHEAP] = x;
int currentIndex = *dimHEAP;
while(currentIndex>=2 && HEAP[currentIndex/2] < x )
{
int aux = HEAP[currentIndex/2];
HEAP[currentIndex/2] = HEAP[currentIndex];
HEAP[currentIndex] = aux;
currentIndex /= 2;
}
}
void makeHEAP( int HEAP[] , int dimHEAP )
{
int son,index;
index = 1;
do
{
son = 0;
if( 2*index <= dimHEAP )
{
son = 2*index;
if ( 2*index+1 <= dimHEAP && HEAP[2*index+1] > HEAP[2*index] )
{
son = 2*index+1;
}
if ( HEAP[index] >= HEAP[son] )
{
son = 0;
}
}
if ( son )
{
int aux = HEAP[index];
HEAP[index] = HEAP[son];
HEAP[son] = aux;
index = son;
}
}while(son);
}
void extractfromHEAP( int HEAP[] , int *dimHEAP )
{
int aux = HEAP[1];
HEAP[1] = HEAP[*dimHEAP];
HEAP[*dimHEAP] = aux;
--*dimHEAP;
int son,index;
index = 1;
do
{
son = 0;
if( 2*index <= *dimHEAP )
{
son = 2*index;
if ( 2*index+1 <= *dimHEAP && HEAP[2*index+1] > HEAP[2*index] )
{
son = 2*index+1;
}
if ( HEAP[index] >= HEAP[son] )
{
son = 0;
}
}
if ( son )
{
int aux = HEAP[index];
HEAP[index] = HEAP[son];
HEAP[son] = aux;
index = son;
}
}while(son);
}
void printHEAP ( int HEAP[] , int dimHEAP )
{
int index;
for ( index = 1; index <= dimHEAP ; index++ )
printf("%d " , HEAP[index] ) ;
printf("\n");
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n, index , x;
int HEAP[NMAX] , dimHEAP = 0;
scanf("%d",&n);
for ( index = 1; index <= n ; index++ )
{
scanf("%d", &x);
//HEAP[index] = x;
addtoHEAP(HEAP,&dimHEAP,x);
}
int S[NMAX] ;
for ( index = n ; index >= 1; index-- )
{
S[index] = HEAP[1];
extractfromHEAP(HEAP,&dimHEAP);
}
printHEAP(S,n);
return 0;
}