【经典算法】:对于堆排序的理解及其实现
来源:互联网 发布:椅子 孩子写作业 知乎 编辑:程序博客网 时间:2024/05/19 16:03
讲讲堆排序的实现步骤:
1,生成堆
2,把堆顶元素放到最后一个
3,调整成为新的堆(这一点至关重要)
堆的二叉结构的实现方式:数组。。。
如果小伙伴还有有堆这种数据结构有不懂的,请参照下方的附录;
最重要的就是调整堆这个函数的书写,其他的都是一些简单的逻辑上面的问题
手撸的C++代码
#include <iostream>#include <algorithm>using namespace std;void HeapAdjust(int *a,int i,int size){ int lchild = 2*i; int rchild = 2*i+1; int max = i; if(i<=size/2){ if(lchild<=size && a[lchild]>a[max]){ max = lchild; } if(rchild<=size && a[rchild]>a[max]){ max = lchild; } if(max!=i){ swap(a[i],a[max]); HeapAdjust(a,max,size); } }}void BuildHeap(int *a,int size){ int i; for(i=size/2;i>=1;i--){ HeapAdjust(a,i,size); }}void HeapSort(int *a,int size){ int i; BuildHeap(a,size); for(i=size;i>=1;i--){ swap(a[1],a[i]); HeapAdjust(a,1,i-1);//对堆进行调整 }}int main(){ int a[100]; int size; while(cin>>size &&size>0){ int i; for(i=1;i<=size;i++){ cin>>a[i]; } HeapSort(a,size); for(i=1;i<=size;i++){ cout<<a[i]<<" "; } }}
附录:一个绝对能看懂堆的调整过程的解释
http://blog.csdn.net/zz198808/article/details/7678055
0 0
- 【经典算法】:对于堆排序的理解及其实现
- 对于堆排序的一些理解!
- 堆排序算法及其Java实现
- 算法基础:堆排序原理及其实现
- 经典算法: 堆排序的原理和实现, 建立堆,调整堆
- 经典的排序算法--堆排序
- 经典排序算法分析及其Java实现
- 经典排序算法及其python实现
- 【经典算法】堆排序
- 经典算法:堆排序
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序的算法实现
- 堆排序算法的实现!!
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 经典排序算法的实现(选择,插入,shell,堆,快速,归并排序)
- Java设计模式(一) Adapter(适配器)模式及I/O实例引申
- Bootstrap框架个人总结
- 深度学习基本概念
- 关于MediaRecorder.setOutputFile(file)的问题!
- updateViewConstraints和updateConstraints
- 【经典算法】:对于堆排序的理解及其实现
- Kubernetes
- 插入排序
- 【学习笔记】3D图形核心基础精炼版-11:stage3D实战-光照效果和范例工程3
- 深入elasticsearch源码之环境搭建
- 关于MySQL连接时出现的错误之一
- hdoj 1799 循环多少次?(打表&&排列组合&&杨辉)
- 雨·晴
- VLC调试:增加messages.c日志函数,在无vlc_object_t下打印日志