java实现堆的操作方法(建堆,插入,删除)
如下所示:
importjava.util.Arrays;
//小顶堆的代码实现
publicclassHeap{
//向下调整,顶端的大值往下调,主要用于删除和建堆,i表示要调整的节点索引,n表示堆的最有一个元素索引
//删除时候,i是0,建堆时候i从最后一个节点的父节点依次往前调整
publicstaticvoidfixDown(int[]data,inti,intn){
intnum=data[i];
intson=i*2+1;
while(son<=n){
if(son+1<=n&&data[son+1]num是进入循环的基本条件,father减到0就不会减少了
//当n等于0时,father=0;进入死循环,所以当n==0时,需要跳出循环
while(data[father]>num&&n!=0){
data[n]=data[father];
n=father;
father=(n-1)/2;
}
data[n]=num;
}
//删除,n表示堆的最后一个元素的索引
publicstaticvoiddelete(int[]data,intn){
data[0]=data[n];
data[n]=-1;
fixDown(data,0,n-1);
}
//增加,i表示要增加的数字,n表示增加位置的索引,是堆的最后一个元素
publicstaticvoidinsert(int[]data,intnum,intn){
data[n]=num;
fixUp(data,n);
}
//建堆,n表示要建堆的最后一个元素的索引
publicstaticvoidcreat(int[]data,intn){
for(inti=(n-1)/2;i>=0;i--)
fixDown(data,i,n);
}
publicstaticvoidmain(String[]args){
int[]data={15,13,1,5,20,12,8,9,11};
//测试建堆
creat(data,data.length-1);
System.out.println(Arrays.toString(data));
//测试删除
delete(data,data.length-1);
delete(data,data.length-2);
System.out.println(Arrays.toString(data));
//测试插入
insert(data,3,data.length-2);
System.out.println(Arrays.toString(data));
}
}
以上这篇java实现堆的操作方法(建堆,插入,删除)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。