Pagini recente » Cod sursa (job #890104) | Cod sursa (job #759162) | Cod sursa (job #787662) | Cod sursa (job #3268470) | Cod sursa (job #2909260)
#include <iostream>
using namespace std;
int n;
const int nmax=500000;
int arr[nmax];
int heap[nmax];
int heapsize=0;
void checkup(int poz)
{
if (poz==1)return;
int tata=poz/2;
if(heap[poz]<heap[tata])
{
swap(heap[poz], heap[tata]);
checkup(tata);
}
}
void insereaza(int nr)
{
heapsize++;
heap[heapsize]=nr;
checkup(heapsize);
}
void checkdown(int poz)
{
if (poz>heapsize)return;
int caz=0;
int minval=heap[poz];
int fiustang=2*poz;
int fiudrept=2*poz+1;
if(fiustang<=heapsize)
if(minval>heap[fiustang])
{
minval=heap[fiustang];
caz=1;
}
if(fiudrept<=heapsize)
if(minval>heap[fiudrept])
{
minval=heap[fiudrept];
caz=2;
}
if(caz==1){
swap(heap[fiustang], heap[poz]);
checkdown(fiustang);
}
if (caz==2){
swap(heap[fiudrept], heap[poz]);
checkdown(fiudrept);
}
}
void sterge (int poz)
{
swap(heap[poz],heap[heapsize]);
heapsize--;
checkdown(poz);
}
void clearheap()
{
heapsize=0;
}
int popheap()
{
int temp=heap[1];
sterge(1);
return temp;
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d", &arr[i]);
insereaza(arr[i]);
}
for(int i=0; i<n; i++)printf("%d ", popheap());
}