Pagini recente » Cod sursa (job #575311) | Cod sursa (job #676256) | Cod sursa (job #2589160) | Cod sursa (job #223294) | Cod sursa (job #480725)
Cod sursa(job #480725)
#include <fstream>
#include <algorithm>
using namespace std;
int a[500005],n,heapsize;
void heapify(int i)
{
int right,largest,left;
largest=i;
left=i*2; right=i*2+1;
if(left<=heapsize and a[left]>a[i]) largest=left;
if(right<=heapsize and a[right]>a[largest]) largest=right;
if(largest!=i) { swap(a[i],a[largest]); heapify(largest); }
}
void buildheap(void)
{
int i;
for(i=heapsize/2+1;i>0;i--) heapify(i);
}
void extractmax(void)
{
swap(a[1],a[heapsize]);
heapsize--;
heapify(1);
}
void heapsort(void)
{
while(heapsize>1)
{
extractmax();
}
}
int main()
{
int i;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
fi>>n;
for(i=1;i<=n;i++) fi>>a[i];
heapsize=n;
buildheap();
heapsort();
for(i=1;i<=n;i++) fo<<a[i]<<" ";
return 0;
}