Pagini recente » Cod sursa (job #2552768) | Cod sursa (job #534782) | Cod sursa (job #13839) | Cod sursa (job #1789650) | Cod sursa (job #2033286)
#include<cstdio>
#define MAX_N 500000
using namespace std;
int heap[MAX_N+1], n, k;
inline void Swap(int i, int j) {
int aux = heap[i];
heap[i] = heap[j];
heap[j] = aux;
}
void heapDown(int i) {
int leftson, rightson;
if(2*i > k) return;
leftson = heap[2*i];
if(2*i+1 <= k)
rightson = heap[2*i+1];
else rightson = leftson + 1;
if(leftson < rightson) {
if(heap[i] <= leftson) return;
Swap(i,2*i);
heapDown(2*i);
}
else {
if(heap[i] <= rightson) return;
Swap(i,2*i+1);
heapDown(2*i+1);
}
}
int main() {
int i;
FILE *fin, *fout;
fin = fopen("algsort.in","r");
fout = fopen("algsort.out","w");
fscanf(fin,"%d",&n);
for(i=1; i<=n; i++)
fscanf(fin,"%d",&heap[i]);
fclose(fin);
k = n;
for(i=n/2; i>=1; i--)
heapDown(i);
for(i=1; i<=n; i++) {
fprintf(fout,"%d ",heap[1]);
Swap(1,k);
k--;
heapDown(1);
}
fprintf(fout,"\n");
fclose(fout);
return 0;
}