通过堆实现一个优先队列,
来源:互联网 发布:zimg php 编辑:程序博客网 时间:2024/05/24 05:22
//最大堆,数组实现完全二叉堆
public class MaxHeap {
int[] data;// data[0]为最大堆的数量
int capacity;//最大堆的容量
public MaxHeap(int capacity) { this.capacity = capacity; data = new int[capacity + 1]; data[0] = 0;}//heapfiypublic MaxHeap(int[] arr) { this.capacity = arr.length; data = new int[arr.length + 1]; data[0] = arr.length; for (int i = 0; i < arr.length; i++) data[i + 1] = arr[i];}public static void main(String[] args) { MaxHeap heap = new MaxHeap(10); int size = heap.size(); boolean bool = heap.isEmpty(); heap.insert(15); heap.insert(12); heap.insert(11); heap.insert(16); for (int j = 1; j <= heap.data[0]; j++) System.out.println(heap.data[j]); int max = heap.extractMax(); for (int j = 1; j <= heap.data[0]; j++) System.out.println(heap.data[j]);}public int extractMax() { if (data[0] > 0) { int max = data[1]; data[1] = data[data[0]]; data[0]--; shiftDown(1); return max; } return Integer.MAX_VALUE;}public void shiftDown(int i) { while (i * 2 <= data[0]) { int j = i * 2; if (j + 1 <= data[0]) if (data[j + 1] > data[j]) j += 1; if (data[i] < data[j]) { swap(i, j); i = j; } else break; }}public void insert(int i) { if (capacity >= data[0] + 1) { data[++data[0]] = i; shiftUp(data[0]); }}private void shiftUp(int i) { while (i > 1 && data[i / 2] < data[i]) { swap(i / 2, i); i /= 2; }}private void swap(int i, int j) { data[i] = data[i] ^ data[j]; data[j] = data[i] ^ data[j]; data[i] = data[i] ^ data[j];}public boolean isEmpty() { return data[0] == 0;}public int size() { return data[0];}
}
阅读全文
0 0
- 通过堆实现一个优先队列,
- 优先队列实现堆
- 优先队列(堆实现)
- 自己实现一个简单的优先队列-二叉堆
- 用java实现一个基于堆排序的优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 最小优先队列--堆实现
- 堆排序,优先队列实现
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 优先队列--二叉堆实现
- 实现一个优先队列
- 利用堆实现堆排序&优先队列
- 利用堆实现堆排序&优先队列
- 优先队列(二叉堆实现) + 堆排序
- 堆的实现、堆排序、优先队列
- 第三十二天 面向对象(上)简单介绍
- QT 5.4 各版本下载地址
- 遥感图像几何校正
- VMware中四种网络连接模式的区别
- MVC模式
- 通过堆实现一个优先队列,
- 实现用户名、邮箱、手机号三种都可以登录
- 一年
- 《化学教学论》总结
- linux 用户和用户组
- 迭代器、增强for、泛型
- 正则表达式
- 迭代和递归基本思想
- 【HDU