C++排序(小堆排序)
来源:互联网 发布:数据统计岗位职责 编辑:程序博客网 时间:2024/04/28 00:02
#include<iostream>#include<string>using namespace std;template<class Type>class MinHeap{public:MinHeap(int sz=DefaultSize){capacity = sz>DefaultSize?sz:DefaultSize;heap = new Type[capacity];size = 0;}MinHeap(Type ar[], int n){capacity = n>DefaultSize?n:DefaultSize;heap = new Type[capacity];for(int i=0; i<n; ++i){heap[i] = ar[i];}size = n;int pos = n/2-1;while(pos >= 0){SiftDown(pos,n-1);pos--;}}~MinHeap(){delete []heap;heap = NULL;}void Show()const{for(int i=0; i<size; ++i){cout<<heap[i]<<" ";}cout<<endl;}bool IsEmpty()const{return size == 0;}bool IsFull()const{return size >= capacity;}void MakeHeap(){size = 0;}Type ReMoveMin(){Type tmp = heap[0];heap[0] = heap[size-1];size--;SiftDown(0,size-1);return tmp;}void Sort(){Type *data = new Type[size];int i = 0;while(!IsEmpty()){data[i++] = ReMoveMin();}size = i;for(i=0; i<size; ++i){heap[i] = data[i];}delete []data;data = NULL;}void Insert(const Type &x){heap[size] = x;SiftUp(size);size++;}private:void SiftUp(int start){int j = start;int i = (j-1)/2;Type tmp = heap[j];while(j>0){if(tmp > heap[i])break;else{heap[j] = heap[i];j = i;i = (j-1)/2;}}heap[j] = tmp;}void SiftDown(int start, int end){int i = start;int j = 2*i+1;Type temp = heap[i];while(j <= end){if(j<end && heap[j] > heap[j+1])j = j+1;if(temp < heap[j])break;else{heap[i] = heap[j];i = j;j = 2*i+1;}}heap[i] = temp;}private:enum{DefaultSize = 10};Type *heap;int capacity;int size;};堆可以被看作是一个完全二叉树,小堆排序利用小根堆堆顶记录的关键字最小这一个特征,使得从当前无序区中选取最小关键字并进一步记录操作变的简单。
1 0
- 堆排序(C++)
- C++排序(小堆排序)
- 小范围排序(堆排序)
- 堆排序(C\C++)
- 排序算法(C实现)--------- 堆排序
- 排序——堆排序(C++)
- 算法 - 堆排序(C#)
- 堆排序(C语言)
- C 堆排序(极简版)
- 堆排序(c实现)
- 堆排序(C语言)
- 堆排序小优化
- 排序算法 - 堆排序 (C++)
- 排序(堆排序)
- 堆排序----C语言
- 堆排序(C#)
- 堆排序C语言
- HeapSort(堆排序 C++)
- phonegap
- hdu 1232 畅通工程(并查集)
- 第六周项目零:阅读程序(5):结构函数和析构函数,对象的赋值
- Mac/Linux如何查找应用所安装路径
- 分词
- C++排序(小堆排序)
- maven服务器搭建
- 安装完MySQL 后必须调整的 10 项配置
- ASP.NET MVC Section
- Android finish()并不会立即杀死进程
- P52第27题
- STL priority_queue<> 用法
- spring download连接
- poj3233 Matrix Power Series(矩阵快速幂)