Pagini recente » Cod sursa (job #520780) | Cod sursa (job #169904) | Cod sursa (job #288857) | Cod sursa (job #910469) | Cod sursa (job #2235957)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 500002;
int v[N];
void downHeap(int l, int t){
int f = 0, key = v[t], Max;
while(t != f){
f = t;
Max = key;
if(f*2 <= l && Max < v[f*2])
t = f*2, Max = v[f*2];
if(f*2+1 <= l && Max < v[f*2+1])
t = f*2+1, Max = v[f*2+1];
v[f] = v[t];
}
v[t] = key;
}
void makeHeap(int l){
for(int i=l/2;i>=1;i--)
downHeap(l,i);
}
void heapSort(int l){
makeHeap(l);
while(l > 1){
swap(v[1], v[l--]);
downHeap(l,1);
}
}
int main()
{
int n;
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
in.close();
heapSort(n);
for(int i=1;i<=n;i++)
out<<v[i]<<" ";
out.close();
return 0;
}