[算法]二叉堆
来源:互联网 发布:百度算法调整2017 编辑:程序博客网 时间:2024/05/15 11:52
#include <iostream>using namespace std;#define MAXSIZE 100class BinaryHeap {private: int values[MAXSIZE]; int size{0}; bool cmp(int left, int right) { return left < right; } int parentIndex(int index) { return (index - 1) >> 1; } int leftSonIndex(int index) { return ((index + 1) << 1) - 1; } int rightSonIndex(int index) { return (index + 1) << 1; }public: BinaryHeap() { memset(values, 0, sizeof(values)); size = 0; } void push(int key) { int pivot; size++; for (pivot = size - 1; pivot > 0; pivot = (pivot - 1) >> 1) { if (cmp(key, values[parentIndex(pivot)])) { values[pivot] = values[parentIndex(pivot)]; } else { break; } } values[pivot] = key; } bool empty() { return size == 0; } int top() { if (!empty()) { return values[0]; } return -1; } void pop() { if (!empty()) { int pivot, tmp; size--; for (pivot = 0; leftSonIndex(pivot) < size; ) { tmp = (rightSonIndex(pivot) <= size && cmp(values[rightSonIndex(pivot)], values[leftSonIndex(pivot)]) ) ? rightSonIndex(pivot) : leftSonIndex(pivot); if (cmp(values[tmp], values[size])) { values[pivot] = values[tmp]; pivot = tmp; } else { break; } } values[pivot] = values[size]; } }};int main() { BinaryHeap heap; int size = 10; for (int i = 0; i < size; ++i) { heap.push(i); } for (int j = 0; j < size; ++j) { cout << heap.top(); heap.pop(); } return 0;}
0 0
- [算法]二叉堆
- 【数据结构与算法】二叉堆
- 用线性时间算法建立二叉堆。
- 《算法之美》---二叉堆及其实现
- a-star算法+二叉堆优化
- 算法导论 第六章 二叉堆
- A*算法中二叉堆的使用
- 《数据结构与算法分析》二叉堆详解
- 堆算法(二叉树创建、遍历)
- 数据结构与算法——二叉堆
- [算法导论笔记]建立二叉堆
- PHP-利用二叉堆实现TopK-算法
- PHP-利用二叉堆实现TopK-算法
- PHP-利用二叉堆实现TopK-算法
- java 使用二叉堆实现 TopK 算法
- 二叉堆 build算法 c++ 数据结构与算法
- 二叉堆
- 二叉堆
- 集群、分布式、负载均衡区别与联系
- hjr学习-设计模式:装饰者模式
- eclipse中properties文件打开中文乱码问题
- 函数指针 与 指针函数
- 19、Power Query-快速分析各产品的销售情况
- [算法]二叉堆
- 阅读文献时存在的三个问题:坐不住,记不住,想不开
- Struts.xml
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- linux c之用fopen、fputs、fgets、 fseek来对文件进行写、替换、读
- springmvc中的参数绑定
- android开发实现静默安装(root权限)
- 初学HTML5,总遇到关于img和background-img使用时遇到的路径问题
- ::before 与 ::after