堆排序
来源:互联网 发布:bi工具竞品 知乎 编辑:程序博客网 时间:2024/05/22 14:15
研究了一下堆排序,也没有想象的那么难嘛
以求最小的k个数为例。
class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> ans; if (input.size() < k) return ans; //建堆,0为根结点,堆大小为k(大根堆),其实也是从叶子结点开始调整堆 for (int i = k / 2; i >= 0; --i) { adjust(input, i, k); } for (int i = k; i < input.size(); ++i) { if (input[i] < input[0]) {//当小于堆顶时,交换,并调整堆 swap(input[i], input[0]); adjust(input, 0, k); } } for (int i = 0; i < k; ++i) ans.push_back(input[i]); return ans; } void adjust(vector<int>& input, int pos, int length) { int le = pos * 2;//左右孩子结点 int ri = pos * 2 + 1; int mmax = pos; //三个if查看当前子树是否为最大堆,不是的话就往下调整 if (le < length && input[le] > input[mmax]) mmax = le; if (ri < length && input[ri] > input[mmax]) mmax = ri; if (mmax != pos) { swap(input[mmax], input[pos]); adjust(input, mmax, length); } }};
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- solr笔记(二)
- 《深度学习Ng》课程学习笔记01week1——深度学习概论
- OSI七层协议
- HAOI2015[BZOJ2110] T1 【树形DP】
- github 中的 watch、star、fork
- 堆排序
- 关于Crash和ANR以及应用保活
- 来到博客的第一天
- 重载和重写的区别
- A GENTLE GUIDE TO USING BATCH NORMALIZATION IN TENSORFLOW
- yii文件上传
- Spring Boot集成MyBatis——注解方式
- 第3章 揭秘C的语法
- 双边滤波器原理及Matlab实现