Pagini recente » Cod sursa (job #1074526) | Cod sursa (job #1041957)
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
int v[500005],n,i,k,x,j;
ifstream f ("algsort.in");
ofstream g("algsort.out");
void add(int x, int &k)
{
v[++k]=x;
if (k==1) return;
else
{
int i=k;
while (v[i]<v[i/2] && i/2)
{
swap(v[i],v[i/2]);
i=i/2;
}
}
}
int remove(int x, int &k)
{
int minim=v[1], st, dr;
swap(v[1],v[k]);
k--;
int i=1, poz=-1;
do
{
st=2*i, dr=2*i+1;
poz=-1;
if (st<=k)
poz=st;
if (poz!=-1 && dr<=k && v[dr]<v[poz])
poz=dr;
if (poz!=-1)
{
if (v[i]>v[poz])
{
swap(v[i],v[poz]);
i=poz;
}
else poz=-1;
}
} while (poz!=-1);
return minim;
}
int main ()
{
f>>n;
k=0;
for (i=1;i<=n;i++)
{
f>>x;
add(x,k);
}
for (i=1;i<=n;i++)
{
//for (j=1;j<=k;j++) cout<<v[j]<<" ";
x=remove(1,k);
g<<x<<" ";
//for (j=1;j<=k;j++) cout<<v[i]<<" ";
//cout<<"\n";
}
f.close();
g.close();
return 0;
}