首先解释一下完全二叉树的概念
如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则我们称为满二叉树。
如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。
完全二叉树处理最后一层,其余层都是满的,如果有n层,那么前n-1层的元素个数总数为2的(n-1)次方减1
于是可以用下面的函数计算把数组转成完全二叉树之后,二叉树有几层
void heapsortfunc(int arr[]){
//第一轮排序
//我先算算这个数组转成完全二叉树有几层
//满二叉树前n层的节点总数为 2的n次方减1,用等比数列求和就可以算了
int length=arr.length;
// int length=1;
int count=0;//计数层数
int tempnum=1;
while(tempnum-1<length)//tempnum-1代表在当前层数(count)下,完全二叉树能存放的最多的元素,当tempnum-1等于或者超过数组中元素个数时,停止加层
{
tempnum=tempnum*2;//模拟2的n次方
count++;
}
System.out.println(count);//count即为完全二叉树的层数
}
测试 int length=1;
测试 int length=15;
测试 int length=16;