Pagini recente » Cod sursa (job #2070940) | Monitorul de evaluare | Cod sursa (job #1581750) | Cod sursa (job #2632893) | Cod sursa (job #1053940)
#define N 500001
#include<iostream>
#include<fstream>
using namespace std;
void insheap(int ans[N],int n,int v)
{
int p,t;
n++;
p=n;
while(p>1)
{
t=p/2;
if (v<=ans[t]) {ans[p]=v;return;}
else {ans[p]=ans[t];p=t;}
}
ans[1]=v;
}
int delheap(int ans[N],int &n)
{
int v=ans[1];
ans[1]=ans[n];
n--;
int i=1;
while(2*i<=n||2*i+1<=n)
{
if(ans[2*i]>ans[2*i+1]) {swap(ans[2*i],ans[i]);i=2*i;}
else {swap(ans[2*i+1],ans[i]);i=2*i+1;}
}
return v;
}
void asamb(int a[N],int n)
{
for(int j=1;j<n;j++)
insheap(a,j,a[j+1]);
}
void heapsort(int a[N],int n)
{
asamb(a,n);
while(n>1) a[n]=delheap(a,n);
}
int main()
{
ifstream f("heapsort.in");
ofstream g("heapsort.out");
int n,i,x,m,a[N];
f>>n;
for(i=1;i<=n;i++) f>>a[i];
heapsort(a,n);
for(i=1;i<=n;i++) g<<a[i]<<" ";
f.close();g.close();
return 0;
}