package DataStructures.Heaps;/*** Minimum Priority Queue It is a part of heap data structure A heap is a specific tree based data* structure in which all the nodes of tree are in a specific order. that is the children are* arranged in some respect of their parents, can either be greater or less than the parent. This* makes it a min priority queue or max priority queue.** <p>** <p>Functions: insert, delete, peek, isEmpty, print, heapSort, sink*/public class MinPriorityQueue {private int[] heap;private int capacity;private int size;// calss the constructor and initializes the capacityMinPriorityQueue(int c) {this.capacity = c;this.size = 0;this.heap = new int[c + 1];}// inserts the key at the end and rearranges it// so that the binary heap is in appropriate orderpublic void insert(int key) {if (this.isFull()) return;this.heap[this.size + 1] = key;int k = this.size + 1;while (k > 1) {if (this.heap[k] < this.heap[k / 2]) {int temp = this.heap[k];this.heap[k] = this.heap[k / 2];this.heap[k / 2] = temp;}k = k / 2;}this.size++;}// returns the highest priority valuepublic int peek() {return this.heap[1];}// returns boolean value whether the heap is empty or notpublic boolean isEmpty() {if (0 == this.size) return true;return false;}// returns boolean value whether the heap is full or notpublic boolean isFull() {if (this.size == this.capacity) return true;return false;}// prints the heappublic void print() {for (int i = 1; i <= this.capacity; i++) System.out.print(this.heap[i] + " ");System.out.println();}// heap sorting can be done by performing// delete function to the number of times of the size of the heap// it returns reverse sort because it is a min priority queuepublic void heapSort() {for (int i = 1; i < this.capacity; i++) this.delete();}// this function reorders the heap after every delete functionprivate void sink() {int k = 1;while (2 * k <= this.size || 2 * k + 1 <= this.size) {int minIndex;if (this.heap[2 * k] >= this.heap[k]) {if (2 * k + 1 <= this.size && this.heap[2 * k + 1] >= this.heap[k]) {break;} else if (2 * k + 1 > this.size) {break;}}if (2 * k + 1 > this.size) {minIndex = this.heap[2 * k] < this.heap[k] ? 2 * k : k;} else {if (this.heap[k] > this.heap[2 * k] || this.heap[k] > this.heap[2 * k + 1]) {minIndex = this.heap[2 * k] < this.heap[2 * k + 1] ? 2 * k : 2 * k + 1;} else {minIndex = k;}}int temp = this.heap[k];this.heap[k] = this.heap[minIndex];this.heap[minIndex] = temp;k = minIndex;}}// deletes the highest priority value from the heappublic int delete() {int min = this.heap[1];this.heap[1] = this.heap[this.size];this.heap[this.size] = min;this.size--;this.sink();return min;}public static void main(String[] args) {// testingMinPriorityQueue q = new MinPriorityQueue(8);q.insert(5);q.insert(2);q.insert(4);q.insert(1);q.insert(7);q.insert(6);q.insert(3);q.insert(8);q.print(); // [ 1, 2, 3, 5, 7, 6, 4, 8 ]q.heapSort();q.print(); // [ 8, 7, 6, 5, 4, 3, 2, 1 ]}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。