Pagini recente » Cod sursa (job #3032761) | Cod sursa (job #833134) | Cod sursa (job #51518) | Cod sursa (job #616436) | Cod sursa (job #1160257)
#include <iostream>
#include <fstream>
using namespace std;
fstream f("algsort.in",ios::in);
fstream g("algsort.out",ios::out);
int A[500100],heap_size;
int LEFT(int i)
{
return 2*i;
}
int RIGHT(int i)
{
return 2*i+1;
}
void exchange(int x,int y)
{
int aux=A[x];
A[x]=A[y];
A[y]=aux;
}
void MAX_HEAPIFY(int i)
{
int largest;
int l=LEFT(i);
int r=RIGHT(i);
if(l<=heap_size&&A[l]>A[i])
largest=l;
else
largest=i;
if(r<=heap_size&&A[r]>A[largest])
largest=r;
if(largest!=i)
{
exchange(i,largest);
MAX_HEAPIFY(largest);
}
}
void BUILD_MAX_HEAP()
{
for(int i=heap_size/2;i>=1;i--)
MAX_HEAPIFY(i);
}
void HEAPSORT()
{
BUILD_MAX_HEAP();
for(int i=heap_size;i>=2;i--)
{
exchange(1,i);
heap_size--;
MAX_HEAPIFY(1);
}
}
int main()
{
int n;
f>>n;
heap_size=n;
for(int i=1;i<=n;i++)
f>>A[i];
HEAPSORT();
for(int i=1;i<=n;i++)
g<<A[i]<<" ";
return 0;
}