Pagini recente » Cod sursa (job #202598) | Cod sursa (job #2047852) | Cod sursa (job #156631) | Cod sursa (job #1129747) | Cod sursa (job #1305843)
#include <fstream>
using namespace std;
#define M 500020
int ans[M],nr_ans,n, i,v, a[M] ;
ifstream f1("algsort.in");
ofstream f2("algsort.out");
void insHeap(int val)
{
nr_ans++;
int parinte=nr_ans, fiu=nr_ans ;
while (parinte > 1 )
{
parinte/=2;
if (val <= ans[parinte] )
break;
ans[fiu]= ans[parinte];
fiu=parinte;
}
ans[fiu ]= val;
}
int extractHeap()
{
int x=ans[1], parinte=1 ,fiu;
ans[1]= ans[ nr_ans];
ans[nr_ans-- ]=0;
while (ans[parinte] < ans[2*parinte ] || ans[parinte] < ans[2*parinte+1 ] )
{
if (ans[2*parinte ] > ans[2*parinte+1 ] )
fiu= 2*parinte;
else fiu=2*parinte+1;
swap(ans[parinte],ans[fiu] );
parinte=fiu;
}
return x;
}
int main()
{
f1>>n;
for (i=1; i<=n; i++)
{
f1>>v;
insHeap(v);
}
for (i=n; i>0; i--)
a[i]=extractHeap();
for (i=1; i<=n; i++)
f2<<a[i] <<" ";
f2.close();
return 0;
}