java 实现最小二叉树堆排序的实例
java实现最小二叉堆排序的实例
写在前面:
一觉醒来,我就突然有灵感了......
最小二叉堆定义:
二叉堆是完全二元树或者是近似完全二元树,最小二叉堆是父结点的键值总是小于或等于任何一个子节点的键值的堆堆。
存储:
二叉堆一般用数组来表示。
根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和2n+2;
位置k的叶子的父节点位置为(k-1)/2;
实现:
/**
*@description元素添加到末尾,和它的父节点比,如果比它小就交换
*@paramarray
*
*@authorLynnWong
*/
privateint[]getMinBinaryHeap(int[]array){
intN=array.length;
intminBinaryHeap[]=newint[N];
introot;//根的值
intheapSize=0;//记录插入位置
for(intnum:array){
minBinaryHeap[heapSize]=num;
++heapSize;
intpointer=heapSize-1;//当前指向的数组元素位置
while(pointer!=0){
intleafPointer=pointer;//叶子节点位置
pointer=(pointer-1)/2;//根节点位置
root=minBinaryHeap[pointer];//根节点
if(num>=minBinaryHeap[pointer]){//永远把当前数组元素看成叶子与其根比较或者换位
break;
}//如果根比叶子大就交换位置
minBinaryHeap[pointer]=num;
minBinaryHeap[leafPointer]=root;
}
}
returnminBinaryHeap;
}
/***
*用随机数测试二叉堆排序
*测试10遍,强迫症似的变态...
*/
publicvoidtext(){
for(inti=0;i<10;i++){
Randomrnd=newRandom();
int[]lala={rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6)};
System.out.print("输入:");
for(inta:lala){
System.out.print(a+"");
}
System.out.println();
int[]array=this.getMinBinaryHeap(lala);
System.out.print("输出:");
for(inta:array){
System.out.print(a+"");
}
System.out.println();
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!