Pagini recente » Cod sursa (job #179758) | Cod sursa (job #2164503) | Cod sursa (job #3138293) | Cod sursa (job #900201) | Cod sursa (job #1259978)
#include <fstream>
#include <vector>
/**
* HEAPSORT
*/
void sink(std::vector<int> &v, std::size_t k, std::size_t dim)
{
while (2*k < dim) {
auto son = 2 * k;
if (son + 1 < dim && v[son] < v[son + 1])
++son;
if (v[k] > v[son])
break;
std::swap(v[k], v[son]);
k = son;
}
}
void swim(std::vector<int> &v, std::size_t k)
{
while (k > 1 && v[k] > v[k/2]) {
std::swap(v[k], v[k/2]);
k /= 2;
}
}
void heapSort(std::vector<int> &v)
{
for (auto i = v.size() / 2; i >= 1; --i)
sink(v, i, v.size());
for (auto it = v.end(); it != v.begin() + 1; --it) {
std::swap(*it, v[1]);
sink(v, 1, it - v.begin());
}
}
void sort(std::vector<int> &v)
{
heapSort(v);
}
int main()
{
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
int N;
fin >> N;
std::vector<int> v(N + 1);
for (auto it = v.begin() + 1; it != v.end(); ++it)
fin >> *it;
sort(v);
for (auto &i : v)
fout << i << " ";
return 0;
}