比较常规的题,试着写了下。
int heap[100]; int n; void adjust_down(int rt) { if(rt<1||rt>n) return; if ( rt*2>n ) return; else { int val=heap[rt<<1]; int child=rt<<1; if(rt*2+1<=n&&heap[rt*2+1]<val) { val=heap[rt*2+1]; child=rt<<1|1; } if(val>=heap[rt]) return; swap(heap[rt],heap[child]); adjust_down(child); } } void adjust_up(int rt) { while(rt!=1) { int par=rt>>1; if(heap[par]>=heap[rt]) { swap(heap[par],heap[rt]); rt=par; } else { break; } } } void heap_push(int val) { heap[++n]=val; adjust_up(n); } void make_heap() { int start=n>>1; for(int i=start;i>=1;i--) adjust_down(i); } void sort_heap() { while(n>1) { swap(heap[1],heap[n]); n--; adjust_down(1); } }