博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优先级队列-堆实现
阅读量:6612 次
发布时间:2019-06-24

本文共 2142 字,大约阅读时间需要 7 分钟。

1 package sorts;  2   3 import java.util.ArrayList;  4 import java.util.List;  5 import java.util.Random;  6   7 public class PriorityQueue
> { // min-heap 8 private List
heap = new ArrayList<>(); 9 private static final int ROOT_INDEX = 0; 10 private static final int PRE_ROOT_INDEX = ROOT_INDEX - 1; 11 public void offer(T obj) { 12 heap.add(obj);//在最后增加一个元素 13 int index = heap.size() - 1;//最后一个元素的索引 14 while (index > ROOT_INDEX) {
//在堆中加一个元素后,调整堆使其再成为一个堆 15 index = stepUpHeap(index);//上浮 16 } 17 } 18 private int stepUpHeap(int index) { 19 int parentIndex = parent(index);//获取父节点的索引 20 T element = heap.get(index); 21 T parent = heap.get(parentIndex); 22 if (parent.compareTo(element) > 0) { //父节点大于儿子节点,交换 23 heap.set(parentIndex, element); 24 heap.set(index, parent); 25 return parentIndex; // 跳到父索引 26 } else 27 return ROOT_INDEX; //不需要交换 28 } 29 public T poll() { 30 if (isEmpty()) 31 throw new RuntimeException(); 32 int index = heap.size() - 1;//最后一个元素的索引 33 T least; 34 if(index==0){ 35 least = heap.get(index); 36 heap.remove(index); 37 } 38 else{ 39 T element = heap.get(index);//取最后一个元素 40 least = heap.get(ROOT_INDEX);//取堆的根元素 41 heap.set(ROOT_INDEX, element);//交换这两个元素 42 heap.set(index, least); 43 heap.remove(index);//删除最后一个元素 44 stepDownHeap(ROOT_INDEX);//下沉调整,使之再次成为堆 45 } 46 return least; 47 } 48 private void stepDownHeap(int index) { 49 int p = index;//parent 50 int lchild = lchild(p);//左子节点 51 T temp = heap.get(p); 52 while(lchild
pq = new PriorityQueue<>(); 98 for (int i = 0; i < 10; i++) { 99 pq.offer(random.nextInt(100));100 }101 for (int i = 0; i < 10; i++) {102 System.out.print(pq.poll() + " ");103 }104 }105 }

 

转载地址:http://rrxso.baihongyu.com/

你可能感兴趣的文章
Java-单机版的书店管理系统(练习设计模块和思想_系列 五 )
查看>>
嵌入式 详解udev
查看>>
《C程序员:从校园到职场》出版预告(2):从“百花齐放”到“一枝独秀”
查看>>
Network Monitor 查询命令和MySQL命令
查看>>
好“戏”刚刚开幕 云计算逐步被认可
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
以全局产业观领航智慧城市建设
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《CCNP SWITCH 300-115认证考试指南》——导读
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
Solaris Studio 12.4 Beta update 7/2014
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>
《用友ERP-U8(8.72版)标准财务模拟实训》——1.4 系统管理注册和导入演示账套...
查看>>
《Node.js区块链开发》一3.6 总结
查看>>
《UG NX8.0中文版完全自学手册》一2.8 布尔运算
查看>>
移动阅读时代“长文章”生存状态调查
查看>>
springboot docker笔记
查看>>