优先队列

package com.test;

import java.util.Arrays;

public class BinaryHeap<E extends Comparable<? super E>> {
    private E[] theList;
    private int currentSize;
    private int hole;

    public BinaryHeap() {
        theList = (E[]) new Comparable[10];
    }

    public void insert(E e) {
        if (currentSize == 0) {
            theList[1] = e;
        } else {
            for (; e.compareTo(theList[hole / 2]) < 0; hole /= 2) {
                theList[hole] = theList[hole / 2];
            }
            theList[hole] = e;
        }
        ++currentSize;
        hole = 1 + currentSize;
    }

    public void deleteMin() {
        E e = theList[1];
        theList[1] = theList[currentSize--];
        theList[currentSize+1] =null;
        percolateDown(1);
        this.hole = currentSize+1;
    }

    public void percolateDown(int hole) {
        E tmp = theList[hole];
        int child = hole * 2;
        for (; child <= currentSize; child *= 2) {
            if (theList[child + 1] != null
                    && theList[child + 1].compareTo(theList[child]) < 0) {
                child++;
            }
            if (tmp.compareTo(theList[child]) > 0) {
                theList[hole] = theList[child];
                hole = child;
            } else {
                break;
            }
            theList[hole] = tmp;
        }

    }

    public static void main(String[] args) {
        BinaryHeap<Integer> bh = new BinaryHeap<>();
        bh.insert(1);
        bh.insert(4);
        bh.insert(5);
        bh.insert(2);
        bh.insert(3);

        bh.deleteMin();
        System.out.println(bh.getTheList());

    }

    private E[] getTheList() {
        return theList;
    }

    private void setTheList(E[] theList) {
        this.theList = theList;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值