堆排序(C++版)
2016-02-29 21:26
381 查看
#include <iostream> using namespace std; void HeapAdjust(int* a, int start, int n) { int max=start; int lchild = start*2+1; int rchild = start*2+2; if(start <= (n-1)/2){ if(lchild <=n && a[lchild]>a[max]){ max = lchild; } if(rchild <=n && a[rchild]>a[max]){ max = rchild; } if(max!=start){ swap(a[start], a[max]); HeapAdjust(a, max, n); } } } void BuildHeap(int* a, int n){ //n: [0,n] for(int i = (n-1)/2; i >=0;i--){ HeapAdjust(a, i, n); } } void HeapSort(int *a,int n) { BuildHeap(a,n); for(int i=n;i>=1;i--) { swap(a[0],a[i]); HeapAdjust(a,0,i-1); } } int main(int argc, char *argv[]) { int a[]={6,36,77,31,181,7,8}; BuildHeap(a,6); for(int i=0;i<7;i++){ cout << a[i] <<endl; } cout << "=================" <<endl; HeapSort(a,6); for(int i=0;i<7;i++){ cout << a[i] <<endl; } return 0; }
相关文章推荐
- Cpp_拷贝构造与拷贝赋值
- C++: 避免cout删除小数中0的操作
- Visual C++上机指南
- 2012年 蓝桥杯C++省赛 古堡算式
- C++智能指针简单剖析
- 浅谈红黑树(C语言代码实现)
- 判断平面上两直线相交
- C/C++,指针的定义和使用
- c++ (P10—46)
- C++中的预处理
- C++中的explicit关键字
- 学习了挺长时间的 gdb, makefile 总结一下,加油!
- c++ vector用法
- C++中的new/delete与operator new/operator delete
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- C++笔记(1)
- C++开发人脸性别识别教程(18)——辅助功能之文件名批量修改、方法验证
- c语言中字符数组和字符指针的区别
- C++中输入带有空格的字符串
- 【c/c++】算法的时间复杂度和空间复杂度