Pagini recente » Cod sursa (job #2514256) | Cod sursa (job #3262763) | Cod sursa (job #2729823) | Cod sursa (job #383110) | Cod sursa (job #1053905)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int v[500000], n, v1[500000],n1;
void urca(int poz)
{ while(poz>1 && v[poz]<v[poz/2])
{ swap(v[poz],v[poz/2]);
poz=poz/2;
}
}
void insert(int val,int i)
{ v[i]=val;
int poz=i;
urca(poz);
}
void coboara(int poz)
{int poz1;
while(poz*2+1<=n && (v[poz]>v[poz*2] || v[poz]>v[poz*2+1]))
{ poz1=poz*2;
if(v[poz1+1]<v[poz])
poz1+=1;
swap(v[poz],v[poz1]);
poz=poz1;
coboara(1);}
if(poz*2==n && v[poz*2]<v[poz])
swap(v[poz],v[poz*2]);
}
void heapsort()
{v1[++n1]=v[1];
v[1]=v[n--];
coboara(1);
}
int main()
{int i,x, aux;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>x;
insert(x,i);
}
aux=n;
for(i=1;i<=aux;i++)
heapsort();
for(i=1;i<=aux;i++)
g<<v1[i]<<" ";
f.close();
g.close();
}