堆的建立
1,建立大堆
2,堆的插入
3,堆顶元素的获取
4,堆的删除
1,堆的建立
public class Heap001 {
//向下调整
public static void shutdown(int arr[],int size,int index){
int parent=index;
int child=2*parent+1;
while(child<size){
if(child+1<size&&arr[child+1]>arr[child]){
child=child+1;
}
if(arr[parent]<arr[child]){
int tmp=arr[child];
arr[child]=arr[parent];
arr[parent]=tmp;
}else{
break;
}
parent=child;
child=2*parent+1;
}
}
//建大堆过程
public static void createheap1(int [] arr){
for(int i=(arr.length-1-1)/2;i>=0;i--){
shutdown(arr,arr.length,i);
}
}
2 堆的插入
在这 //堆中插入元素
public static void showup(int[] arr,int size,int index){
int child=index;
int parent=(child-1)/2;
while(child>0){
if(arr[parent]<arr[child]){
int tmp=arr[parent];
arr[parent]=arr[child];
arr[child]=tmp;
}else{
break;
}
child=parent;
parent=(child-1)/2;
}
}
private int[] ar=new int[100];
private int size=0;
public void offer(int val){
if(size>=ar.length){
return ;
}
ar[size]=val;
size++;
showup(ar,size,size-1);
}里插入代码片
3堆顶元素的获取
public Integer peek(){
if(size==0){
return 0;
}
return ar[0];
}
在这里插入代码片
4 堆删除操作
//删除操作
public Integer poll(){
if(size==0){
return null;
}
int result=ar[0];
int tmp=ar[0];
ar[0]=ar[ar.length-1];
ar[ar.length-1]=tmp;
size--;
shutdown(ar,size,0);
return result;
}