Pagini recente » Cod sursa (job #2166779) | Cod sursa (job #2611098) | Cod sursa (job #1132114) | Cod sursa (job #963140) | Cod sursa (job #1810097)
//HeapSort
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define dimMax 500005
int N;
int x;
int minHeap[dimMax];
int k;
int i, j;
int l;
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] > minHeap[2*j + 1] && 2*j < k)) {
if(minHeap[j] > minHeap[2*j] && minHeap[j] > minHeap[2*j + 1]) { //C1
if(minHeap[2*j] < minHeap[2*j + 1]) {
swap(minHeap[2*j], minHeap[j]);
j = 2*j;
}
else {
swap(minHeap[2*j +1], minHeap[j]);
j = 2*j + 1;
}
}
else if(minHeap[2*j] < minHeap[j]) { //C2
swap(minHeap[2*j], minHeap[j]);
j = 2*j;
}
else { //C3
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;
}