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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。