Pagini recente » Cod sursa (job #1686365) | Cod sursa (job #2587927) | Cod sursa (job #188509) | Cod sursa (job #1747635) | Cod sursa (job #2694626)
#include <fstream>
#define DMAX 500002
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[DMAX];
void BuildMinHeap(int a[], int n);
void Heapify(int a[], int n, int poz);
//heap sort-minheap
int main()
{
int n,i,r;
fin>>n;
for(i=0;i<n;i++)
fin>>a[i];
BuildMinHeap(a,n);
r=n-1;
while(r>0)
{
swap(a[r],a[0]);
Heapify(a,r,0);
r--;
}
for(i=n-1;i>=0;i++)
fout<<a[i]<<' ';
fout<<'\n';
return 0;
}
void BuildMinHeap(int a[], int n)
{
int i;
for(i=n/2-1;i>=0;i--)
Heapify(a,n,i);
}
void Heapify(int a[], int n, int poz)
{
int k,heap=0;
while(poz*2+1<n&&!heap)
{
k=poz*2+1;
if(k+1<n&&a[k+1]<a[k])
k=k+1;
if(a[poz]>a[k])
{
swap(a[poz],a[k]);
poz=k;
}
else heap=1;
}
}