堆排序
来源:互联网 发布:保利投资顾问待遇知乎 编辑:程序博客网 时间:2024/06/03 21:03
先用线性时间建立一个堆,然后将堆的最后一个元素与第一个元素交换。将堆的大小减一并执行下滤。
#include <vector>using namespace std;template <typename Comparable>void heapsort(vector<Comparable> & a){ for(int i=a.size()/2-1;i>=0;--i) { percDown(a,i,a.size()); //构建堆序 } for(int j=a.size()-1;j>0;--j) { std::swap(a[0], a[j]); //将最大值删除放在队尾,size-1 percDown(a,0,j); }}inline int leftChild(int i){ return 2*i+1;}template <typename Comparable>void percDown(vector<Comparable> & a,int i,int size){ int child; auto tmp=std::move(a[i]); for(;leftChild(i)<size;i=child) { child=leftChild(i); if(child!=size-1&&a[child]<a[child+1]) child++; if(tmp<a[child]) a[i]=std::move(a[child]); else break; } a[i]=std::move(tmp);}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Android Studio 3.0使用Kotlin开发初体验
- Tree----- 226. Invert Binary Tree(镜像树)
- ant table 扩展 显示html文档 格式化json字符串 并且 实时动态关键字高亮
- mysql触发器
- 多旋翼无人机抛飞实现流程_APM固件
- 堆排序
- SQL 之 cast()函数
- Gym
- fragment懒加载时生命周期分析
- Java中泛型 类型擦除
- 彻底卸载MySQL的方法
- ckeditor 学习笔记【3】粘贴事件/截图粘贴
- Win32串行通信中文版(Serial Communications In Win32)
- HDU5858 Hard problem