Pagini recente » Cod sursa (job #1177095) | Cod sursa (job #331076) | Cod sursa (job #987141) | Cod sursa (job #393869) | Cod sursa (job #1810044)
//HeapSort
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define dimMax 500000
int N;
int x;
int minHeap[dimMax];
int k;
int i, j;
void pushHeap() {
k++;
minHeap[k] = x;
j = k;
while(j > 1 && minHeap[j/2] > minHeap[j]) {
swap(minHeap[j/2], minHeap[j]);
j /= 2;
}
}
void popHeap() {
swap(minHeap[1], minHeap[k]);
k--;
j = k;
while(j > 1 && minHeap[j/2] > minHeap[j]) {
swap(minHeap[j/2], minHeap[j]);
j /= 2;
}
j = 1;
while((minHeap[j] > minHeap[2*j] && 2*j <= k) || (minHeap[j] > 2*j + 1 && 2*j <= k)) {
if(minHeap[2*j] < minHeap[2*j + 1]) {
swap(minHeap[2*j], minHeap[j]);
}
else {
swap(minHeap[2*j + 1], minHeap[j]);
}
j = 2*j + 1;
}
}
int main()
{
fin>>N;
for(i = 1 ; i <= N ; i++) {
fin>>x;
pushHeap();
}
for(i = 1 ; i <= N ; i++) {
popHeap();
}
for(i = N ; i >= 1 ; i--)
fout<<minHeap[i]<<' ';
fin.close();
fout.close();
return 0;
}