Pagini recente » Istoria paginii runda/xp/clasament | Monitorul de evaluare | Cod sursa (job #1233247) | Cod sursa (job #263376) | Cod sursa (job #2078205)
#include <fstream>
#define nmax 500002
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int heap[nmax],heap_size,n;
void interschimba(int i,int j)
{
int aux=heap[i];
heap[i]=heap[j];
heap[j]=aux;
}
void InsMinHeap(int x)
{
heap[++heap_size]=x;
int poz=heap_size;
while(poz!=1)
{
int tata=poz/2;
if(heap[tata]>heap[poz])
interschimba(tata,poz);
poz/=2;
}
}
void MinHeapify(int k)
{
if(k<=heap_size)
{
int minim=k;
if(k*2<=heap_size && heap[k*2]<heap[k])
minim=k*2;
if(k*2+1<=heap_size && heap[k*2+1]<heap[minim])
minim=k*2+1;
if(minim!=k)
{
interschimba(k,minim);
MinHeapify(minim);
}
}
}
int DelMinHeap()
{
int minim=heap[1];
interschimba(1,heap_size);
--heap_size;
MinHeapify(1);
return minim;
}
int main()
{
int heap_size=0;
f>>n;
for(int i=1; i<=n; ++i)
{
int x;
f>>x;
InsMinHeap(x);
}
for(int i=1;i<=n; ++i)
g<<DelMinHeap()<<' ';
return 0;
}