Pagini recente » Cod sursa (job #2894706) | Cod sursa (job #1950781) | Cod sursa (job #3041800) | Cod sursa (job #2662477) | Cod sursa (job #371886)
Cod sursa(job #371886)
#include<fstream>
using namespace std;
int n, H[500002];
ofstream fout("algsort.out");
void afis(int k)
{
for(int i=k;i>=1;i--)
{
fout<<H[i]<<" ";
}
fout<<endl;
}
void cerne(int k, int nr)
{
int i, eH=0, aux;
while(!eH && 2*k<=nr)
{
i=2*k;
if(i+1<=nr && H[i+1]<H[i])
i=i+1;
if(H[k] <= H[i])
eH=1;
else
{
aux=H[k];
H[k]=H[i];
H[i]=aux;
k=i;
}
}
}
void promoveaza(int k)
{
int eH=0,aux;
while(k/2 && !eH)
if(H[k/2] <= H[k])
eH=1;
else
{
aux=H[k];
H[k]=H[k/2];
H[k/2]=aux;
k=k/2;
}
}
void read()
{
int n;
ifstream fin("algsort.in");
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>H[i];
//afis(n);
promoveaza(i);
//afis(n);
}
fin.close();
}
void HS(int nr)
{
int aux;
for(;nr>1;)
{
aux=H[1];
H[1]=H[nr];
H[nr]=aux;
nr--;
cerne(1,nr);
}
}
int main()
{
read();
HS(n);
afis(n);
return 0;
}