[各种面试题] 堆的实现

来源:互联网 发布:中国石化加油卡淘宝 编辑:程序博客网 时间:2024/06/07 07:36

比较常规的题,试着写了下。

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);}}


原创粉丝点击