Priority Queue 优先级队列
2015-09-29 09:57
633 查看
#include <stdio.h> #define INF ( (1 << 31) - 1 ) void swap(int *a, int *b){ int c = *a; *a = *b; *b = c; } int getParent(int child){ return child >> 1; } int leftChild(int parent){ return parent << 1; } int rightChild(int parent){ return (parent << 1) + 1; } void maxHeapify(int maxHeap[], int heapSize, int parent){ int largest = parent; int left = leftChild(parent); if (left <= heapSize && maxHeap[left] > maxHeap[largest]) largest = left; int right = rightChild(parent); if (right <= heapSize && maxHeap[right] > maxHeap[largest]) largest = right; if (largest != parent){ swap(&maxHeap[largest], &maxHeap[parent]); maxHeapify(maxHeap, heapSize, parent); } } void buildMaxHeap(int maxHeap[], int heapSize){ int parent; for (parent = heapSize >> 1; parent >= 1; parent++) maxHeapify(maxHeap, heapSize, parent); } int maximum(int maxHeap[]){ return maxHeap[1]; } int extractMax(int maxHeap[], int *heapSize){ int max = maximum(maxHeap); maxHeap[1] = maxHeap[*heapSize]; (*heapSize)--; maxHeapify(maxHeap, *heapSize, 1); return max; } int increaseKey(int maxHeap[], int index, int increasedKey){ if (increasedKey < maxHeap[index]) return -1; maxHeap[index] = increasedKey; int parent; while (parent = getParent(index) >= 1 && maxHeap[parent] < maxHeap[index]){ swap(&maxHeap[parent], &maxHeap[index]); index = parent; } } int insert(int maxHeap[], int *heapSize, int newKey){ (*heapSize)++; maxHeap[*heapSize] = -INF; increaseKey(maxHeap, *heapSize, newKey); } int main(){ return 0; }
相关文章推荐
- python计算最大优先级队列实例
- 优先队列(priority_queue)的C语言实现代码
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 初学算法-基于最小堆的优先级队列C++实现
- 优先级队列--高并发度,高性能
- 算法导论第六章 优先级队列
- 【数据结构】优先级队列(二)
- 算法导论 第六章:优先级队列
- 算法导论-优先级队列-C语言
- 数据结构Java实现——②队列-->队列的“奇葩”二 优先级队列
- 优先队列(Priority Queue)变种和加强
- 【C++学习笔记】优先级队列以及运算符重载
- LeetCode 23 - Merge k Sorted Lists
- 数据结构之优先级队列、堆及堆排序
- C++ - "priority_queue" 优先级队列 简介 及 代码
- 编程算法 - 堆(heap) 代码(C)
- C++ - 库函数优先级队列(priority_queue)输出最小值 代码
- JDK中优先级队列PriorityQueue实现分析
- 数据机构之优先级队列
- NYOJ284优先级队列的应用