Pagini recente » Cod sursa (job #1141412) | Cod sursa (job #287121) | Clasament cerculdeinfo-lectia17-teoriajocurilo | Cod sursa (job #318479) | Cod sursa (job #2739282)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
vector <int> min_heap;
int n;
int IndexStanga(int i)
{
return 2*i+1;
}
int IndexDreapta(int i)
{
return 2*i+2;
}
void coboara(int i)
{
int st,dr,pozmin;
st=IndexStanga(i);
dr=IndexDreapta(i);
pozmin=i;
if(st<min_heap.size() && min_heap[st]<min_heap[pozmin])
pozmin=st;
if(dr<min_heap.size() && min_heap[dr]<min_heap[pozmin])
pozmin=dr;
if(pozmin!=i) //v[i] nu e mai mic decat ambii=> trebuie sa-i dau swap cu un fiu
{
swap(min_heap[i], min_heap[pozmin]);
coboara(pozmin);
}
}
void Min_Heapify()
{
for(int i=min_heap.size()/2; i>=0; i--)
coboara(i);
}
int Heap_Pop()
{
int radacina=min_heap.front();
min_heap[0]=min_heap[min_heap.size()-1]; //mut ultimul element in radacina
min_heap.pop_back();
coboara(0); //coboara radacina
return radacina;
}
void HeapSort()
{
for(int i=0; i<n; i++)
fout<<Heap_Pop()<<" ";
}
int main()
{
int x;
fin>>n;
for(int i=0; i<n; i++)
{
fin>>x;
min_heap.push_back(x);
}
Min_Heapify();
HeapSort();
return 0;
}