算法导论笔记之----堆排序
2012-07-24 09:08
246 查看
最大堆,父节点大于它的孩子节点的值。。。先采用递归的方法,建立一个最大堆,然后将堆的最高父节点与当前所保留的树最后一个节点交换,同时去掉最后一个节点,将剩余树从新建堆。。
#include<iostream> using namespace std; void Buildhead(int *arr,int parent,int longth) { int lagest; if(parent*2+1<=longth) { for(;parent>=0;--parent) { lagest=parent*2+1; if(lagest+1<=longth&&arr[lagest]<arr[lagest+1]) lagest++; if(arr[parent]<arr[lagest]) { swap(arr[parent],arr[lagest]); Buildhead(arr,lagest,longth); } } } } void B_sort(int *arr,int longth) { Buildhead(arr,(longth-1)/2,longth);//建立一个最大堆 for(int i=longth;i>0;) { swap(arr[i],arr[0]); i--; Buildhead(arr,(i-1)/2,i); } } int main() { int T=0; int *arr; while(cin>>T,T) { arr=new int[T]; cout<<"please input "<<T<<"numbers: "; for(int i=0;i<T;++i) cin>>arr[i]; B_sort(arr,T-1); for(int i=0;i<T;++i) cout<<arr[i]<<" "; cout<<endl; delete arr; } return 0; }
相关文章推荐
- 算法导论笔记之堆排序
- 《算法导论》第6章 堆排序 个人笔记
- 算法导论学习笔记——堆排序
- 算法导论学习笔记之四--堆排序
- 算法导论笔记(一) :堆排序
- 算法导论学习笔记-第六章-堆排序
- 《算法导论》笔记---第6章 堆排序
- 算法导论学习笔记(一)排序算法之堆排序
- 算法导论笔记-第六章-堆排序
- 算法导论学习笔记--2--堆排序
- 《算法导论》笔记(4)堆排序与快速排序 含部分习题
- 算法导论学习笔记——第6章 堆排序
- 算法导论笔记,堆排序
- 算法导论学习笔记(1)---堆排序
- 《算法导论》第六章 堆排序 笔记
- 《算法导论》学习笔记--第六章 堆排序
- 算法导论笔记——堆排序
- 算法导论-堆排序学习笔记
- 算法导论学习笔记——第12章 二叉查找树
- 《算法导论》笔记 第19章 19.1 二项树与二项堆