HeapSort非递归实现
来源:互联网 发布:中石油hazop风险矩阵 编辑:程序博客网 时间:2024/06/05 18:39
注意: 在改变被破坏的大小顶堆结构时,for循环的边界条件。
#include <stdio.h>#include <stdlib.h>void HeapSort(int array[],int len);void BuildMaxHeap();void AdjastDown(int array[],int k,int len);void Swap(int array[],int a,int b);void PrintArray(int array[],int len);int main(){ int array[14] = {0,100,25,65,43,57,3,77,91,12,22,10,50,41}; HeapSort(array,13); PrintArray(array,13);}void HeapSort(int array[],int len){ BuildMinHeap(array,len); int i; for(i=len; i>1; i--){ Swap(array,1,i); AdjastDown(array,1,i-1); //PrintArray(array,i-1); }}void BuildMinHeap(int array[],int len){ int i; for(i=len/2; i>0; i--){ AdjastDown(array,i,len); }}void AdjastDown(int array[],int k,int len){ int i; for(i=2*k; i<=len;i=2*k){ if(array[i] >= array[i+1] && i<len){ //起初把'i<len'这个条件设置到了for循环的判断条件上,但后来发现,每次AdjastDown的最后一次操作,程序都不会正确提取出最后两个值的最小值,因为k=1时,i=2*1已经等于len,违背了i<len,所以不会执行for循环里面的swap操作。 i++; } if(array[k] <= array[i]){ break; } else{ Swap(array,k,i); k=i; } }}void Swap(int array[],int a,int b){ int temp = array[a]; array[a] = array[b]; array[b] = temp;}void PrintArray(int array[],int len){ int i; printf("\n"); for(i=1; i<=len; i++){ printf("%d ",array[i]); }}
阅读全文
1 0
- HeapSort非递归实现
- 组合非递归实现
- Fibonacci 非递归实现
- InorderTraversal非递归实现
- 实现非递归表达
- heapsort的实现
- HeapSort的C#实现
- heapsort实现代码
- 组合函数递归和非递归实现
- 二分查找递归和非递归实现
- 字符串逆序(递归非递归实现)
- 递归方法的非递归实现
- 递归非递归实现树的遍历
- 递归和非递归实现数组求和
- 矩阵相乘--递归与非递归实现
- 递归和非递归实现阶乘
- 字符串排列递归和非递归实现
- 递归和非递归实现汉诺塔问题
- cs231n-激活函数、BN、参数优化等
- MongoDB中几个关键字
- Webhacking writeup By Assassin [随便玩一玩]
- Android探索之旅(第二十九篇)QRCode终极秘术之三码合一(微信,QQ,支付宝)
- Node.js调试工具
- HeapSort非递归实现
- 明码 与 密码 切换
- 微信小程序开发心得--动画机制
- JDBC详解之存储过程的调用
- Python多进程multiprocessing.Pool()
- 报告丨2016-2017年中国手机地图市场研究报告
- 自定义函数标签,用于前台获取小数据,例如下拉框中的值
- flask搭建个人博客(一)
- 上传问题总结(文件大小检测,大文件上传)