Pagini recente » Cod sursa (job #2939314) | Cod sursa (job #731928) | Cod sursa (job #1025111) | Cod sursa (job #3030537) | Cod sursa (job #641063)
Cod sursa(job #641063)
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
vector<long int>heap(500001,0);
inline long int parinte(long int x)
{return x/2;}
inline long int fiul_stang(long int x)
{return x*2;}
inline long int fiul_drept(long int x)
{return x*2+1;}
void citire(long int &n)
{
long int i,x;
f>>n;
heap.push_back(0);
for(i=1;i<=n;i++)
{
f>>heap[i];
}
}
void afisare(long int n)
{
long int i;
for(i=1;i<=n;i++)
g<<heap[i]<<' ';
}
void heap_urca(long int x,long int n)
{
long int ok=0;
while(ok==0&&fiul_stang(x)<=n)
{
ok=1;
if(fiul_drept(x)<=n&&(heap[x]<heap[fiul_stang(x)]||heap[x]<heap[fiul_drept(x)]))
{
ok=0;
if(heap[fiul_stang(x)]>heap[fiul_drept(x)])
{
swap(heap[x],heap[fiul_stang(x)]);
x=fiul_stang(x);
}
else
{
swap(heap[x],heap[fiul_drept(x)]);
x=fiul_drept(x);
}
}
else
if(heap[x]<heap[fiul_stang(x)]&&fiul_drept(x)>n)
{
ok=0;
swap(heap[x],heap[fiul_stang(x)]);
x=fiul_stang(x);
}
}
}
void heap_mare(long int n)
{
long int i;
for(i=n/2;i>=1;i--)
heap_urca(i,n);
}
void heap_sort(long int n)
{
long int i;
for(i=n;i>=1;i--)
{
heap_mare(i);
swap(heap[1],heap[i]);
}
}
int main()
{
long int n;
citire(n);
heap_sort(n);
afisare(n);
f.close();
g.close();
return 0;
}