【算法导论】C++参考源码之堆排序中的优先级队列
来源:互联网 发布:金融数据分析导论 编辑:程序博客网 时间:2024/05/23 00:05
这篇例子中有几处BUG,无法插入新值,因为数组已经定义好了大小,解决方法:可以选择STL的容器来,也可以选择在已有的内存上使用动态分配。
#include <iostream>using namespace std;#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}int length = 0;void max_heapify(int A[], int i){ int largest; int l = 2 * (i + 1) - 1; int r = 2 * (i + 1); if (l <= length && A[l] > A[i]) largest = l; else largest = i; if (r <= length && A[r] > A[largest]) largest = r; if (largest != i) { swap(A[i], A[largest]); max_heapify(A, largest); } }int getParent(int i){if(i % 2 == 0) return (i / 2 - 1); else return ((i + 1) / 2 - 1);}// 返回堆的最大值int heap_maximum(int A[]){return A[0];}// 取出最大值并去除int heap_extract_max(int A[]){if (length < 1){cerr << "error!" << endl;exit(0);}int max = A[0];A[0] = A[length - 1];--length;max_heapify(A, 0);return max;}// 调高第i个值的优先级到key值void heap_increase_key(int A[], int i, int key){if (key < A[i]){cerr << "error!" << endl;exit(0);}A[i] = key;int parent_i = getParent(i);while (i > 0 && A[getParent(i)] < A[i]){swap(A[i], A[getParent(i)]);i = getParent(i);}}// 在优先级队列中插入值void max_heap_insert(int A[], int key){++length;A[length - 1] = -0xFFFF;heap_increase_key(A, length - 1, key);}int main(){int A[] = {16, 14, 10, 8, 7, 9, 3, 2, 4, 1}; GET_ARRAY_LEN(A, length);heap_increase_key(A, 8, 15);heap_extract_max(A);//max_heap_insert(A, 100);for (int i = 0; i < length; ++i){cout << A[i] << " ";}cout << endl;return 0; }
- 【算法导论】C++参考源码之堆排序中的优先级队列
- 【算法导论】堆排序和优先级队列
- 【算法导论】C++参考源码之堆排序
- 《算法导论》第6章 堆排序 (2)优先级队列
- 算法导论:堆排序的应用---优先级队列
- 《算法导论》第六章之堆和优先级队列相关算法C语言实现
- 算法导论 之 堆排序[C语言]
- 读《算法导论》我来C语言实现(3)——堆排序和优先级队列
- 【算法导论】C++参考源码之队列、二叉树
- 算法导论中的快速排序C源码~
- 关于堆排序(参考自算法导论)
- 【算法导论】第六章 再谈 堆排序和最大优先级队列
- 【算法导论】C++参考源码之基础排序
- 【算法导论】C++参考源码之线性时间排序
- 算法导论-优先级队列-C语言
- 【算法导论】之堆排序
- 算法导论之堆排序
- 算法导论之堆排序
- jQuery插件开发学习(1)
- jquery实现页面提示,数据正在加载中。(
- JavaScript闭包示例
- python 读取中文文件名/中文路径
- android AsyncTask介绍
- 【算法导论】C++参考源码之堆排序中的优先级队列
- LCS/LIS/LCIS 模板总结
- CoreData基础
- MD5 Hash NSURL
- hdu2817之整数快速幂
- 转载:压缩感知技术
- SQL ----DML,DDL,SELECT DISTINCT
- 需求分析之——用例图
- 跨平台utf8转unicode研究实现(2)