Pagini recente » Cod sursa (job #2109166) | Cod sursa (job #257631) | Cod sursa (job #227175) | Cod sursa (job #2828130) | Cod sursa (job #2083303)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void max_heapify(int *a, int i, int n)
{
int jos, temp;
temp = a[i];
jos = 2*i;
while (jos <= n)
{
if (jos < n && a[jos+1] > a[jos])
jos = jos+1;// ne ducem pe cel mai din dreapta nod
if (temp > a[jos])
break; // daca radacina e mai mare decat nodul curent , ne oprim
else if (temp <= a[jos])
{
a[jos/2] = a[jos];
jos = 2*jos; // punem in radacina , valoarea max( fiu 1 , fiu 2... )
}
}
a[jos/2] = temp; // valoarea radacinii ( penultima ) a devenit valoarea fiului care avusese cea mai mare valoare
return;
}
void heapsort(int *a, int n)
{
int i, temp;
for (i = n; i >= 2; i--)
{
temp = a[i];
a[i] = a[1];
a[1] = temp;
max_heapify(a, 1, i - 1);
} // sortam
}
void build_maxheap(int *a, int n)
{
int i;
for(i = n/2; i >= 1; i--)
{
max_heapify(a, i, n);
}
}// creeare heap
int main()
{
int n, i, x;
f>>n;
int a[500002];
for (i = 1; i <= n; i++)
{
f>>a[i];
}
build_maxheap(a,n);
heapsort(a, n);
for (i = 1; i <= n; i++)
{
g<<a[i];
}
return 0;
}