堆排序
来源:互联网 发布:网络层有哪些功能 编辑:程序博客网 时间:2024/06/05 23:51
// 调整指定结点void adjust_heap(vector<int> &arr, int i, int size) //最大堆{ int parrent = i, child = 2 * i + 1, val = arr[parrent]; // 寻找val的最终位置 while (child < size) { if (child + 1 < size && arr[child] < arr[child + 1]) child += 1; if (arr[parrent] < arr[child]) { swap(arr[parrent], arr[child]); parrent = child; child = 2 * parrent + 1; } else break; } arr[parrent] = val;}// 调整数组,使其符合堆结构void make_heap(vector<int> &arr){ for (int i = arr.size() / 2; i >= 0; i--) adjust_heap(arr, i, arr.size());}// 堆排序void sort_heap(vector<int> &arr){ for (int i = arr.size() - 1; i >= 0; i--) { swap(arr[i], arr[0]); adjust_heap(arr, 0, i); }}void print(vector<int> &arr){ for (int i = 0; i < arr.size(); i++) cout << arr[i] << " "; cout << endl;}int main(){ vector<int> arr = { 1, 3, 4, 5, 2, 6, 9, 7, 8, 0 }; print(arr); make_heap(arr); print(arr); sort_heap(arr); print(arr);}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- java向上转型和向下转型
- 【学习笔记】TensorFlow 入门之基本使用
- C++不要在构造函数和析构函数中调用virtual函数的原因
- 【OpenJ 2987】T3 小兔子捡金币(小金币捡兔子)
- keil5 点击build 每次都全编译
- 堆排序
- 实验2.2 单链表实现成绩管理——基础操作的实现
- Java——文件复制异常处理
- 图片比较工具
- [codevs1615]数据备份
- 持续集成:Jmeter+Maven+Jenkins自动化框架搭建(四):GitLab代码更新触发Jenkins自动构建
- Python 读写CSV文档
- 关于冒泡排序复杂度O(n)
- java笔试题-ssm