堆与堆排序
2015-09-20 20:12
183 查看
原文链接:/article/1389267.html
void MinHeapFixup1(int *a,int i){ int j; int temp; j = (i - 1) / 2; temp = a[i]; while(j >= 0 && i != 0){ if(a[j] < a[i]) break; a[i] = a[j]; i = j; j = (i - 1) / 2; } a[i] = a[j]; }
void MinHeapFixup(int *a,int i){ for(int j = (i - 1) / 2; j >= 0 && i != 0 && a[j] > a[i];i = j,j = (i - 1) / 2) swap(a[i],a[j]); }
void MinHeapAddNum(int *a,int n,int num){ a = num; MinHeapFixup(a,n); }
void MinHeapFixdown(int *a,int i,int n){ int j = 2 * i + 1; int temp = a[i]; while(j < n){ if(j + 1 < n && a[j + 1] < a[j]) j++; if(a[j] > temp) break; a[j] = temp; i = j; j = 2 * i + 1; } a[i] = temp; }
void MinHeapFixdown2(int *a,int i,int n){ for(int j = 2 * i + 1; j < n && i < n;i = j,j = 2 * i + 1){ if(j + 1 < n && a[j + 1] < a[j]) j++; if(a[j] > a[i]) break; swap(a[j],a[i]); } }
void MinHeapDelNum(int *a,int n){ swap(a[0],a[n - 1]); MinHeapFixdown(a,0,n - 1); }
void MakeMinHeap(int *a,int n){ for(int i = n / 2 - 1;i >= 0;i--) MinHeapFixdown(a,i,n); }
void MinHeapSortToDes(int *a,int n){ MakeMinHeap(a,n); for(i = n - 1;i >= 0;i--){ swap(a[0],a[i]); MinHeapFixdown(a,0,i); } }
相关文章推荐
- poj 1782 Run Length Encoding 自动机处理字符串
- 九大内置对象及四大作用域
- 信息安全系统设计基础第一周学习总结
- Java中重载和重写的区别
- NYOJ 76 超级台阶 (斐波那契)
- hdu 5464 Clarke and problem (BestCoder Round #56 (div.2))
- 技术人生:故事之三十六 放弃骑士时代
- [LeetCode] Move Zeroes - 整数数组处理问题
- MapReduce的InputFormat学习过程
- usaco Magic Squares
- HTTP劫持后续查查xjcf168.com
- 转 Java this、super使用总结
- 软件测试基础整理(第1章-到6章)
- 样式(style)和主体(theme)的回顾温习
- Android 异步消息处理机制 让你在深入了解 Looper、Handler、Message之间的关系
- 2015北京网络赛 A题 The Cats' Feeding Spots 暴力
- c++爱问的面试问题
- android中AdapterView的观察者模式
- vmware disk space
- 技术人生:故事之三十五 金钱第二