void put(int x){//放入元素
int pre,post;//前驱和后继
heap[size++]=x;//申请一块区域存储x
pre=size;//前区为x的编号
while(pre>1){//从编号向1搜索
post=pre/2;//找父节点
if(heap[post]<=heap[pre])//如果父节点小于的话,返回
return ;
change(heap[post],change[pre]);//交换儿子和父亲
pre=post;//重新搜索
}
}
int get(){//获取最小的元素
int pre,post,res;
res=heap[1];//res指向根
heap[1]=heap[size--];//先把最后一个元素赋给根
pre=1;
while(pre*2<size){//在范围内搜索
post=pre*2;
if(post<size&&heap[post+1]<heap[post])//左儿子大于右儿子
post++;
if(heap[pre]<=heap[post])//如果前驱小于后继,返回输出
return res;
change(heap[pre],heap[post]);//交换
pre=post;
}
return res;
}
合并果子(小根堆)
最新推荐文章于 2024-07-27 19:37:05 发布