Pagini recente » Cod sursa (job #1702204) | Monitorul de evaluare | Cod sursa (job #2060447) | Cod sursa (job #2227727) | Cod sursa (job #1702198)
#include <fstream>
#include <vector>
using namespace std;
inline int left(int index)
{
return 2 * index + 1;
}
inline int right(int index)
{
return 2 * index + 2;
}
void heapify(vector<int>& heap, const int index, const int dim)
{
int i = index;
while(i < dim)
{
int l = left(i);
int r = right(i);
int maxi = i;
if(l < dim && heap[l] > heap[maxi])
{
maxi = l;
}
if(r < dim && heap[r] > heap[maxi])
{
maxi = r;
}
if(maxi == i)
{
break;
}
else
{
swap(heap[i], heap[maxi]);
}
i = maxi;
}
}
void build_heap(vector<int>& v)
{
int N = v.size();
for(int i = N / 2 - 1;i >= 0;--i)
{
heapify(v, i, N);
}
}
void heap_sort(vector<int>& v)
{
build_heap(v);
int N = v.size();
int dim = v.size();
for(int i = N - 1;i >= 1;--i)
{
swap(v[i], v[0]);
--dim;
heapify(v, 0, dim);
}
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
int N;
in >> N;
vector<int> v;
for(int i = 0;i < N;++i)
{
int nr;
in >> nr;
v.push_back(nr);
}
heap_sort(v);
for(int i = 0;i < N - 1;++i)
{
out<<v[i]<<" ";
}
out<<v[N - 1];
out<<"\n";
in.close();
out.close();
}