自己实现一个最小堆

这篇博客详细介绍了如何使用Java实现一个最小堆。通过数组int[ ]queue存储堆,并利用变量length跟踪有效元素数量。主要内容包括实现堆排序算法、堆的元素弹出、添加及查看首元素等关键操作。
摘要由CSDN通过智能技术生成
说明:
  1. 用数组int[ ]queue来充当堆,用变量int length来记录队列的有效元素长度
  2. sort( ):实现堆排序(堆排序算法详解:点击此处
  3. poll( ):弹出队列首元素
  4. add( ):往堆中添加元素
  5. peek( ):返回队列首元素
class priorityQueue{
   int[] queue=new int[5000];
   int length=0;
   //实现堆排序
   private void sort(){
       for(int i=length/2-1;i>=0;i--){
           int left=2*i+1>=length?i:2*i+1;
           int right=2*i+2>=length?i:2*i+2;
           int root=queue[i];
           int lChild=queue[left];
           int rChild=queue[right];
           if(root<=lChild&&root<=rChild){
               continue;
           }
           int max=Math.min(rChild,lChild);
           int maxIndex=lChild<=rChild?left:right;
           queue[maxIndex]=root;
           queue[i]=max;
       }
   }
   public  int poll(){
        //将首元素排除在有效范围之外(交换首尾元素,有效范围缩小1)
        int temp=queue[0];
        queue[0]=queue[length-1];
        queue[length-1]=temp;
        length--;
        //重构堆序列
        sort();
        return queue[length];
   }
   public void add(int val){
       queue[length++]=val;
       //每次添加元素都要重构堆
       sort();
   }
   public int peek(){
       if(length==0){
           throw new RuntimeException("队列为空");
       }
       return queue[0];
   }
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值