Pagini recente » Cod sursa (job #1633633) | Cod sursa (job #1160020) | Cod sursa (job #1714856) | Cod sursa (job #1649437) | Cod sursa (job #2058362)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
#define NMAX 500001
//This will be a minHEAP
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++ )
g << HEAP[index] << " " ;
g << "\n";
}
int main()
{
// freopen("algsort.in","r",stdin);
// freopen("algsort.out","w",stdout);
int n, index , x;
int HEAP[NMAX] , dimHEAP = 0;
f >> n;//scanf("%d",&n);
for ( index = 1; index <= n ; index++ )
{
f >> x;
//scanf("%d", &x);
//HEAP[index] = x;
addtoHEAP(HEAP,dimHEAP,x);
}
int S[NMAX] ;
for ( index = n ; index >= 1; index-- )
{
g << HEAP[1] << " " ;
extractfromHEAP(HEAP,dimHEAP);
}
//printHEAP(HEAP,dimHEAP);
return 0;
}