/**
* 前提:默认传入的数组除了index和它的孩子之外,其他位置已经满足堆的性质
*
* 判断叶子结点,完全二叉树中叶子结点没有左孩子一定没有右孩子,而且左孩子下标越界
* 有左孩子不一定有没有右孩子
* 只有左孩子 左孩子
* 左右
* @param array 被看做堆的数组
* @param size 数组中被看做堆的值的个数
* @param index 要调整的位置的下标
*/
public static void heapify(int[] array,int size,int index){
//二叉树越接近于完全二叉树 n层高或者最后一层为n 时间复杂度为logn
//int left=2*index+1
//while(left<=size)--
while(true){
int left=2*index+1;
if(left>=size){
return ;
//下标越界
}
int max=left;
if(left+1<size){
if(array[left+1]>array[left]){
max=array[left+1];
}
}
if(array[index]>array[max]){
return;
}
swap(array,index,max);
index=max;
}
}
public static void swap(int[] array,int i,i
任意数组转成堆,向上调整,向下调整
最新推荐文章于 2023-03-27 22:05:23 发布