常用排序算法——堆排序
来源:互联网 发布:js 搜索功能 编辑:程序博客网 时间:2024/06/04 18:52
#include <iostream>using namespace std;template<typename T>void heapify(T *arry,int size,int element, bool dec){ int lchild=element*2+1,rchild=lchild+1;//左右子树 if(dec) { while(rchild<size)//子树均在范围内 { //如果比左右子树都小,完成整理 if(arry[element]<=arry[lchild]&&arry[element]<=arry[rchild]) { return; } if(arry[lchild]<=arry[rchild])//如果左边最小 { //把左面的提到上面 swap(arry[element],arry[lchild]); //循环时整理子树 element=lchild; } else//否则右面最小 { swap(arry[element],arry[rchild]);//同理 element=rchild; } lchild=element*2+1; rchild=lchild+1;//重新计算子树位置 } if(lchild<size&&arry[lchild]<arry[element])//只有左子树且子树小于自己 { swap(arry[lchild],arry[element]); } } else { while(rchild<size)//子树均在范围内 { if(arry[element]>arry[lchild]&&arry[element]>arry[rchild]) { return; } if(arry[lchild]>arry[rchild])//如果左边最小 { swap(arry[element],arry[lchild]); element=lchild; } else { swap(arry[element],arry[rchild]);//同理 element=rchild; } lchild=element*2+1; rchild=lchild+1; } if(lchild<size&&arry[lchild]>=arry[element]) { swap(arry[lchild],arry[element]); } } return;}template<typename T>void heap_sort(T *arry,int size, bool dec = true){ int i; //从子树开始整理树 for(i=size-1;i>=0;i--) { heapify(arry,size,i, dec); } while(size>0)//拆除树 { swap(arry[size-1],arry[0]);//将根(最小)与数组最末交换 size--;//树大小减小 heapify(arry,size,0, dec);//整理树 } return;}int main(){ int size; cin >> size; int *arr = new int[size]; for(int i = 0; i < size; ++ i) cin >> *(arr+i); heap_sort(arr, size, false); for(int i = 0; i < size; ++ i) cout << *(arr + i) << " "; cout << endl;}
0 0
- 常用排序算法——堆排序
- 常用排序算法——堆排序
- 常用排序算法——插入排序,快速排序,归并排序,堆排序,计数排序
- 常用算法——堆排序
- 排序算法—堆排序
- 常用排序算法--堆排序
- 排序算法—堆和堆排序
- 排序算法——堆排序算法
- 排序算法——堆排序
- 排序算法——堆排序
- 排序算法——堆排序
- 排序算法——堆排序
- 算法——排序之堆排序
- 排序算法——堆排序
- 排序算法——堆排序
- 排序算法——堆排序
- 排序算法系列——堆排序
- 【排序算法】——堆排序
- 5. Longest Palindromic Substring
- Entity Framework添加记录时获取自增ID值
- appium环境搭建(python+windows)
- Python自定义函数基础:无形参和有形参解析
- WebView与Html交互,获取点击事件,并处理响应逻辑
- 常用排序算法——堆排序
- AngularJS 过滤器
- ios 验证码生成
- OpenCV两种易于理解的访问像素的方法
- nodejs安装express成功,但是使用不了的解决方法。
- cocos2dx google升级libpng
- Android歌词播放的实现
- HDU 3363 Ice-sugar Gourd
- linux下多定时器的实现(经典)