创建小根堆的两种方法
- 上滑创建
可将单个的数插入到小根堆中 - 下滑创建
用于将一个顺序结构的二叉树数组创建为一个小根堆
package java数据结构练习;
import java.util.Arrays;
public class 小根堆 {
static int b[];//初始为空的数组,动态插入数到小根堆中
//上滑构建小根堆,用于顺序插入一个数到小根堆
static void downheap(int index)
{
int temp=b[index];
for(int i=(index-1)/2;index>=0;i=(i-1)/2)//i为parent
{
if(b[i]>temp)
{
b[index]=b[i];
index=i;
}
else break;
}
b[index]=temp;
}
//下滑构建小根堆,用于将一个序列构建为顺序二叉树再进行调整
static void UPheap(int a[],int index)
{
int temp=a[index];
for(int i=index*2+1;i<a.length;i=i*2+1)//i为child
{
if((i+1)<a.length && a[i]>a[i+1])
i++;
if(a[i]<temp)
{
a[index]=a[i];
index=i;
}
else
break;
}
a[index]=temp;
}
public static void main(String[] args) {
int a[]= {4,6,8,5,9};
/*for(int i=a.length/2-1;i>=0;i--)
UPheap(a, i);*/
b=new int[a.length];
for(int i=0;i<a.length;i++)
{
b[i]=a[i];
downheap(i);
}
System.out.println(Arrays.toString(b));
}
}