C++堆排序代码
来源:互联网 发布:淘宝女鞋店 知乎 编辑:程序博客网 时间:2024/06/18 17:40
#ifndef HEAP_H#define HEAP_H#include <stdlib.h>#include <memory.h>template<class T>class Heap// 依赖<运算{public:Heap():m_data(0), m_size(0), m_max_size(0){Resize(128);}~Heap(){if (m_data != 0)free(m_data);}void Push(const T &val){if (m_size == m_max_size) Resize(m_max_size * 2);int s = m_size;++m_size;while(s > 0){int f = (s - 1) / 2;if (!(val < m_data[f])) break;m_data[s] = m_data[f];s = f;}m_data[s] = val;}void PopFront(){if (m_size == 0) return ;--m_size;if (m_size == 0) return ;T tmp = m_data[m_size];int f = 0;int half_size = m_size / 2;while(f < half_size){int s = f * 2 + 1;if (s + 1 < m_size && m_data[s + 1] < m_data[s]) ++s;if (!(m_data[s] < tmp)) break;m_data[f] = m_data[s];f = s;}m_data[f] = tmp;}T & Front() { return m_data[0];}bool Front(T *v){if (m_size != 0){*v = m_data[0];return true;}return false;}int Size() { return m_size; }void Clear() { m_size = 0; }protected:T *m_data;int m_size;int m_max_size;void Resize(int size){if (size <= m_max_size) return;T *new_data = (T*)malloc(size * sizeof(T));if (m_data != 0){memcpy(new_data, m_data, m_size * sizeof(T));free(m_data);}m_data = new_data;m_max_size = size;}};#endif
0 0
- 堆排序 纯C代码
- 堆排序C语言代码
- 八大排序算法及完整c代码—堆排序c、java代码
- 数据结构 - 堆排序(heap sort) 详解 及 代码(C++)
- 算法代码实现之堆排序,C/C++实现
- 堆排序:源码(C++)--伪代码--时间复杂度解析
- 堆排序代码
- 堆排序Java代码
- 堆排序《代码》
- 堆排序 经典代码
- 堆排序代码
- 堆排序详细代码
- 堆排序+代码实现
- 堆排序练习代码
- C++堆排序代码
- 堆排序代码
- 堆排序代码实现
- 堆排序JAVA代码
- 使用Amoeba实现mysql读写分离
- python小工具
- 模式识别算法-支持向量机SVM 3
- 机器学习 之 决策树
- Java中SimpleDateFormat用法详解
- C++堆排序代码
- LR_MD5代码
- Best Time to Buy and Sell Stock III
- 黑马程序员-----JAVA新特性
- Eclipse - 快捷键的设置
- 修改keystore密码别名等
- linux 多线程一篇挺好的文章(包括参数处理)
- leetcode 35: Search Insert Position
- Path Sum