堆排序(小根堆)
来源:互联网 发布:vb九九乘法表代码简单 编辑:程序博客网 时间:2024/06/05 15:55
#include <cstdio>#include <iostream>#include <cstring>using namespace std ;int h[100000] ;int n ;void siftdown(int i) //i为要调整的根节点{ int flag = 1,t ; //flag用来标记是否还需要继续调整 while(2*i <= n && flag) //是否至少有左子树 { if(h[2*i]<h[i]) t = 2*i ; else t = i ; if(2*i+1 <= n) //如果也有右子树 { if(h[2*i+1]<h[t]) t = 2*i+1 ; } if(i != t) //如果子树比根节点小 { int temp = h[i] ; h[i] = h[t] ; h[t] = temp ; i = t ; //将i赋值为最小的节点,方便继续操作 } else flag = 0 ; //已经不需要继续调整了 }}void create() //建立堆的函数,多次调用siftdown{ for(int i = n/2;i>=1;i--) { siftdown(i) ; } printf("小根堆创建成功\n") ;}int deleteMin() //删除最大的元素{ int t = h[1] ; h[1] = h[n] ; n-- ; siftdown(1) ; return t ;}int main(){ printf("输入数字个数\n") ; int num ; scanf("%d",&num) ; n = num ; for(int i = 1 ;i<=num ;i++) //scanf("%d",&h[i]) ; h[i] = 100-i ; create() ; printf("正序排序后如下\n") ; for(int i = 1 ;i<=num;i++) printf("%d ",deleteMin()) ; return 0 ;}
2 0
- 堆排序(小根堆)
- 堆(堆排序)
- 排序(堆排序)
- 二叉堆(堆排序)
- 堆排序(最小堆)
- (二叉堆,堆排序)
- 堆排序(最大堆)
- 堆排序(最大堆)
- 堆排序(最大堆)
- java堆排序算法(小根堆)
- Java 堆排序(大根堆及小根堆)
- 小根堆,大根堆,堆排序
- 堆排序(小根堆)
- 排序(之堆排序)
- 排序(6)堆排序
- 排序(三) 堆排序
- 排序(四):堆排序
- hdu1106 排序(堆排序)
- 写给已有编程经验的 Python 初学者的总结
- Java中Math类的常用方法
- CI学习随手记(二)
- delphi xe 之路(14)使用FireMonkeyStyle
- hbase exporter importer 导出 导入
- 堆排序(小根堆)
- 第十七周项目今天第几秒
- JTAG的描述及与JLINK的区别
- Red Hat自动启动和停止NFS服务
- 《将博客搬至CSDN》
- delphi xe之路(15)ListView MultiDetail
- 智能家居接触后,类QQ的聊天工具socket外网通信深入了解
- 资源向导之 "APUE"
- 老程序员的下场