二叉堆
Posted 菜菜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉堆相关的知识,希望对你有一定的参考价值。
根据算法导论里的伪代码实现
#include <iostream> using namespace std; void exchange(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void adjustTree(int a[], int i, int total) { int l = i * 2; int r = i * 2 + 1; //取左右孩子中最大的 int maxIndex = -1; if(l <= total && a[l] > a[i]) { maxIndex = l; } else maxIndex = i; if(r <= total && a[r] > a[maxIndex]) { maxIndex = r; } if(maxIndex != i) { exchange(a, i, maxIndex); //TODO 优化 adjustTree(a, maxIndex, total); } } void buildTree(int a[], int total) { for(int i = total / 2; i >= 1; i--) { adjustTree(a, i, total); } } /** * 大堆 */ int main() { int a[] = { 0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 }; int total = 10; buildTree(a, total); for(int i = 1; i <= total; i++) cout << " " << a[i]; cout << endl; int t2 = total; for(int i = total; i >= 2; i--) { exchange(a, 1, t2); t2--; adjustTree(a, 1, t2); } for(int i = 1; i <= total; i++) cout << " " << a[i]; cout << endl; return 0; }
以上是关于二叉堆的主要内容,如果未能解决你的问题,请参考以下文章
Java 数据结构 & 算法宁可累死自己, 也要卷死别人 13 二叉堆