Pagini recente » Cod sursa (job #3238949) | Cod sursa (job #1758698) | Cod sursa (job #1555719) | Cod sursa (job #1339079) | Cod sursa (job #1835976)
#include <iostream>
#include <fstream>
#include <vector>
class Heap{
private:
std::vector<int> heap;
public:
void push(int value)
{
heap.push_back(value);
for(int v=heap.size()-1;v!=0;v=(v-1)/2)
{
if(heap[v] < heap[(v-1)/2])
std::swap(heap[v],heap[(v-1)/2]);
else
break;
}
}
size_t size()
{
return heap.size();
}
int top()
{
return heap[0];
}
void pop()
{
std::swap(heap[0],heap[ heap.size()-1 ]);
heap.pop_back();
int v=0;
while(true)
{
if((2*v+1<(int)heap.size() && heap[2*v+1]<heap[v]) && (2*v+2>=(int)heap.size() || heap[2*v+1]<heap[2*v+2]))
{
std::swap(heap[v],heap[2*v+1]);
v=2*v+1;
continue;
}
if((2*v+2<(int)heap.size() && heap[2*v+2]<heap[v]) && heap[2*v+2]<heap[2*v+1])
{
std::swap(heap[v],heap[2*v+2]);
v=2*v+2;
continue;
}
break;
}
}
};
void heapSort(std::vector<int> &v)
{
Heap H;
while(v.size())
{
H.push(v[ v.size()-1 ]);
v.pop_back();
}
while(H.size())
{
v.push_back(H.top());
H.pop();
}
}
int main()
{
std::ifstream in("algsort.in");
int n;
std::vector<int> v;
in>>n;
for(int i=0;i<n;i++)
{
int x;
in>>x;
v.push_back(x);
}
in.close();
heapSort(v);
std::ofstream out("algsort.out");
for(int i=0;i<n;i++)
out<<v[i]<<' ';
out<<'\n';
out.close();
return 0;
}