Pagini recente » Cod sursa (job #923280) | Cod sursa (job #1360723) | Cod sursa (job #877334) | Cod sursa (job #160651) | Cod sursa (job #1816148)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int FatherOfNode(int node)
{
return node / 2;
}
int LeftSon(int node)
{
return 2 * node;
}
int RightSon(int node)
{
return 2 * node + 1;
}
int MaxFromHeap(vector<int> v)
{
return v[1];
}
void sift(vector<int> &v, int n, int k)
{
int son;
do
{
son = 0;
if (LeftSon(k) <= n)
{
son = LeftSon(k);
if (RightSon(k) <= n && v[RightSon(k)] > v[son])
son = RightSon(k);
if (v[son] <= v[k])
son = 0;
}
if (son)
{
swap(v[son], v[k]);
k = son;
}
} while (son);
}
void HeapSort(vector<int> &v, int n)
{
for (int i = n; i > 1; --i)
{
swap(v[i], v[1]);
sift(v, i - 1, 1);
}
}
void CreateHeap (vector<int> &v, int n)
{
for (int i = n / 2; i > 0; --i)
sift(v, n, i);
}
int main()
{
int n;
vector<int> v;
f >> n;
v.resize(n + 1);
for (int i = 1; i <= n; ++i)
f >> v[i];
CreateHeap(v, n);
HeapSort(v, n);
for (int i = 1; i <= n; ++i)
g << v[i] << " ";
return 0;
}