【最小堆】--排序 -- Timer 最小堆 举例
来源:互联网 发布:2016詹姆斯总决赛数据 编辑:程序博客网 时间:2024/06/04 01:15
1 数组中增加元素,从底层上升 保证最小堆
private void fixUp(int k) { while (k > 1) { int j = k >> 1; if (queue[j].nextExecutionTime <= queue[k].nextExecutionTime) break; TimerTask tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp; k = j; }}
1.5 删除元素
/** * Remove the head task from the priority queue. */void removeMin() { queue[1] = queue[size]; queue[size--] = null; // Drop extra reference to prevent memory leak fixDown(1);}
2 数组中减少元素 ,从上层下降保证最小堆
private void fixDown(int k) { int j; while ((j = k << 1) <= size && j > 0) { if (j < size && //注意是小于 少一次运算 queue[j].nextExecutionTime > queue[j+1].nextExecutionTime) j++; // j indexes smallest kid if (queue[k].nextExecutionTime <= queue[j].nextExecutionTime) break; TimerTask tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp; k = j; }}
3 整体堆排序 注意:为什么从 size/2 开始?和logn的关系
void heapify() { for (int i = size/2; i >= 1; i--) fixDown(i);}
阅读全文
0 0
- 【最小堆】--排序 -- Timer 最小堆 举例
- 堆排序 - 最小堆
- 最小堆和堆排序
- 堆排序(最小堆)
- 堆排序之最小堆
- 最小堆及堆排序
- 最小堆和最小堆排序
- 最小堆排序
- 最小堆排序法
- 最大/最小堆排序
- 最大最小堆排序
- 最大堆、最小堆、堆排序
- 最大堆、最小堆、堆排序
- 堆排序:最大堆与最小堆
- 最小(大)堆应用---堆排序
- 堆排序(最小堆)--【算法导论】
- 堆排序和优先队列【最小堆】
- 最小堆,堆排序(c++代码)
- ES6学习笔记
- 01背包问题
- 个人总结46
- leetcode-169. Majority Element
- git 入门
- 【最小堆】--排序 -- Timer 最小堆 举例
- Radiolink AT9驱动安装及固件升级
- myeclipse tomcat 运行项目报OOM
- Day11多态部分-2-1
- nginx 负载均衡
- 深入分析java web中文编码问题(其三)
- Hadoop源码分析:Writable接口和WritableComparable接口
- Bug管理系统UML2.0建模实例(四)
- Day11多态部分-3