【排序算法】-堆排序
来源:互联网 发布:淘宝贷款上征信吗 编辑:程序博客网 时间:2024/06/05 18:49
只实现了最大堆,最小堆同理;没有设置模板接口创建最小堆,之后改进。环境:VS2010 C++ Win10 64位。
template <typename Type>class Heap{public: void sort(vector <Type> &array); void buildHeap(vector <Type>&array); Heap() :heapSize(0){}private: int heapSize; void keepHeap(vector <Type>& array, int element); int left(int element){ return element * 2+1; } int right(int element){ return (element+1) * 2 ; } void swap(vector <Type>& array, int n1, int n2);};template<typename Type>void Heap<Type> ::keepHeap(vector <Type>& array, int element){//维护最大堆性质 int l = left(element), r = right(element); int largest = 0; if (l < heapSize && array.at(l) > array.at(element)) largest = l; else largest = element; if (r < heapSize && array.at(r) > array.at(largest)) largest = r; if (largest != element) { swap(array, element, largest); keepHeap(array, largest); }}template<typename Type>void Heap<Type>::buildHeap(vector <Type>&array){ heapSize = array.size(); for (int i = array.size() / 2-1 ; i >= 0 ; --i) { keepHeap(array, i); }}template<typename Type>void Heap<Type> ::sort(vector <Type>&array){ buildHeap(array); for (int i = array.size() - 1; i >0; --i) { swap(array, 0, i); heapSize--; keepHeap(array, 0); }}template<typename Type>void Heap<Type>::swap(vector <Type>& array, int n1, int n2){ Type tmp = array[n1]; array[n1] = array[n2]; array[n2] = tmp;}
算法特点归纳总结:
算法实现较为复杂,维护堆性质部分,使用了递归的算法,程序开销较大。算法平均复杂度和最坏情况为
0 0
- 排序算法--堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 排序算法--堆排序
- 排序算法----堆排序
- 排序算法--堆排序
- 排序算法 堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- linux课堂笔记3
- RecyclerView解析
- java基础学习总结——Object类
- 剑指offer--4.重建二叉树
- 编译caffe遇到的问题汇总
- 【排序算法】-堆排序
- java基础学习总结——equals方法
- CSS3判断手机横屏竖屏
- 随机梯度下降求解非平滑优化:收敛结果和最优平均策略。
- STL的多线程安全问题
- 关于友盟SDK和支付宝SDK类重复的问题解决--ava.util.zip.ZipException: duplicate entry: com/ut/device/AidCallback.class
- Java ServerSocket 手动关闭监听
- java项目中session设置的三种方式介绍 ------谷营中西
- java基础学习总结——static关键字