Pagini recente » Cod sursa (job #3182288) | Cod sursa (job #2710776) | Cod sursa (job #3291703) | Cod sursa (job #1072705) | Cod sursa (job #550745)
Cod sursa(job #550745)
#include<fstream>
using namespace std;
int v[500002],n,dim;
void read()
{int i;
ifstream in("algsort.in");
in>>n;
for(i=1;i<=n;i++)
in>>v[i];
in.close();
}
void write()
{int i;
ofstream out("algsort.out");
for(i=1;i<=n;i++)
out<<v[i]<<" ";
out<<'\n';
}
void reconheap(int i)
{int l,r,max,aux;
l=2*i;
r=2*i+1;
if(l<=dim&&v[l]>v[i])
max=l;
else
max=i;
if(r<=dim&&v[r]>v[max])
max=r;
if(max!=i)
{aux=v[i];
v[i]=v[max];
v[max]=aux;
reconheap(max);
}
}
void conheap()
{int i;
dim=n;
for(i=n/2;i>=1;i--)
reconheap(i);
}
void heapsort()
{int i,aux;
conheap();
for(i=n;i>=2;i--)
{aux=v[1];
v[1]=v[i];
v[i]=aux;
dim--;
reconheap(1);
}
}
int main()
{read();
heapsort();
write();
return 0;
}