Pagini recente » Cod sursa (job #6219) | Cod sursa (job #497177) | Cod sursa (job #3145452) | Cod sursa (job #3262426) | Cod sursa (job #2651983)
#include <fstream>
#include <vector>
void heapify(std::vector<int>& v, const int& n, int i)
{
int largest = i;
int left = i * 2 + 1;
int right = i * 2 + 2;
if (left < n && v[left] > v[largest])
{
largest = left;
}
if (right < n && v[right] > v[largest])
{
largest = right;
}
if (largest != i)
{
std::swap(v[i], v[largest]);
heapify(v, n, largest);
}
}
void buildHeap(std::vector<int>& v, const int& n)
{
for (int i = (n - 1) / 2; i >= 0; --i)
{
heapify(v, n, i);
}
}
void sort(std::vector<int>& v, const int& n)
{
buildHeap(v, n);
for (int i = n - 1; i >= 0; --i)
{
std::swap(v[i], v[0]);
heapify(v, i, 0);
}
}
int main()
{
std::ifstream in("algsort.in");
int n;
in >> n;
std::vector<int> v(n);
for (int i = 0; i < n; ++i)
{
in >> v[i];
}
sort(v, n);
std::ofstream out("algsort.out");
for (int i = 0; i < n; ++i)
{
out << v[i] << ' ';
}
out << std::endl;
return 0;
}