首页 > 代码库 > 二叉堆
二叉堆
根据算法导论里的伪代码实现
#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;}
二叉堆
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。