Pagini recente » Cod sursa (job #381686) | Cod sursa (job #1616916) | Cod sursa (job #2326975) | Cod sursa (job #3194888) | Cod sursa (job #2785480)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[500002], n;
void Insert(int x, int poz)
{
a[poz] = x;
while(a[poz / 2] > a[poz])
{
swap(a[poz / 2], a[poz]);
poz /= 2;
}
}
void Delete()
{
int poz = 1, minim = 2e9;
a[poz] = a[n--];
if(2 * poz + 1 <= n)
minim = min(a[2 * poz], a[2 * poz + 1]);
else
if(2 * poz <= n)
minim = a[2 * poz];
else return;
while(a[poz] > minim)
{
if(a[2 * poz] == minim)
{
swap(a[poz], a[2 * poz]);
poz = poz * 2;
}
else
{
swap(a[poz], a[2 * poz + 1]);
poz = poz * 2 + 1;
}
if(2 * poz + 1 <= n)
minim = min(a[2 * poz], a[2 * poz + 1]);
else
if(2 * poz <= n)
minim = a[2 * poz];
else return;
}
}
int main()
{
int i, x;
fin >> n;
for(i = 1; i <= n; i++)
{
fin >> x;
Insert(x, i);
}
while(n > 0)
{
fout << a[1] << " ";
Delete();
}
return 0;
}