Pagini recente » Cod sursa (job #2907071) | Cod sursa (job #1597924) | Cod sursa (job #1534981) | Cod sursa (job #1570345) | Cod sursa (job #2189870)
#include<cstdio>
#define MAX_N 500000
using namespace std;
int heap[MAX_N + 1], n, heapSize;
inline void Swap(int i, int j) {
int aux = heap[i];
heap[i] = heap[j];
heap[j] = aux;
}
void downHeap(int i) {
int leftSon, rightSon;
if(2*i > n) return;
leftSon = heap[2*i];
if(2*i + 1 <= n)
rightSon = heap[2*i + 1];
else rightSon = leftSon + 1;
if(leftSon <= rightSon) {
if(heap[i] <= leftSon) return;
Swap(i,2*i);
downHeap(2*i);
} else {
if(heap[i] <= rightSon) return;
Swap(i,2*i+1);
downHeap(2*i+1);
}
}
int main() {
int i;
FILE* fin, *fout;
/*fin = fopen("heapsort.in","r");
fout = fopen("heapsort.out","w");*/
fin = fopen("algsort.in","r");
fout = fopen("algsort.out","w");
fscanf(fin,"%d",&n);
heapSize = n;
for(i = 1; i <= n; i++)
fscanf(fin,"%d",&heap[i]);
for(i = n/2; i >= 1; i--)
downHeap(i);
for(i = 1; i <= heapSize; i++) {
fprintf(fout,"%d ",heap[1]);
Swap(1,n);
n--;
downHeap(1);
}
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
}