import java.util.Arrays;
import java.util.Random;
/**
* Created by jc6a on 2018/4/19.]
* 二叉堆 堆中某个值总是不大于其父节点的值;堆总是一棵完全二叉树。(最大堆)
*/
public class MaxHeap {
private int arr[];
int count;
private int capacity;
public MaxHeap(int capacity){
arr = new int[capacity+1];
count = 0;
this.capacity = capacity;
}
int size(){
return count;
}
boolean isEmpty(){
return count == 0;
}
void insert(int data){
assert (count+1<=capacity);
arr[count+1] = data;
count++;
shiftUp(count);
}
void shiftUp(int k){
while(k>1 &&arr[k/2] <arr[k]){
swap(arr,k/2,k);
k /= 2;
}
}
int extractMax(){
assert (count>0);
int max = arr[1];
swap(arr,1,count);
count --;
shiftDown(1);
return max;
}
void shiftDown(int k){
while(k*2<=count){
int j = 2*k;
if(j+1<=count&&arr[j+1]>arr[j]){
j+=1;
}
if(arr[k]>=arr[j]){
break;
}
swap(arr,k,j);
k = j;
}
}
void swap(int arr[],int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
MaxHeap
最新推荐文章于 2024-03-14 12:09:58 发布