Pagini recente » Cod sursa (job #2469930) | Cod sursa (job #2386515) | Cod sursa (job #225603) | Cod sursa (job #2398871) | Cod sursa (job #1813659)
#include <cstdio>
using namespace std;
int v[500001],h[500001];
void modif (int e){
int c,p,aux;
c=e;
p=e/2;
while (p>0){
if (h[c]>h[p]){
aux=h[c];
h[c]=h[p];
h[p]=aux;
}
else break;
c=p;
p/=2;
}
}
void mod (int n){
int p,c,aux;
p=1;
c=2*p;
while (c<=n){
if (c+1<=n && h[c+1]>h[c])
c++;
if (h[p]<h[c]){
aux=h[p];
h[p]=h[c];
h[c]=aux;
}
p=c;
c*=2;
}
}
int main()
{
FILE *fin=fopen ("algsort.in","r");
FILE *fout=fopen ("algsort.out","w");
int n,i,e,aux;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++)
fscanf (fin,"%d",&v[i]);
h[1]=v[1];
e=1;
for (i=2;i<=n;i++){
h[++e]=v[i];
modif (e);
}
// acum h e heap
for (i=n;i>0;i--){
aux=h[1];
h[1]=h[i];
h[i]=aux;
e--;
mod (e);
}
for (i=1;i<=n;i++)
fprintf (fout,"%d ",h[i]);
return 0;
}