数组实现堆排序(来源算法导论)
2014-03-12 11:07
441 查看
//from 算法导论 #include <iostream> using namespace std; int left_place(int ); int right_place(int); void swap_two(int &,int &); void Max_HEAP(int* ,int ,int); void build_HEAP(int *,int ); void Heap_sort(int *,int); int left_place(int i) { return 2*i; } int right_place(int i) { return 2*i+1; } void swap_two (int &a,int &b) { int temp; temp=a; a=b; b=temp; } void Max_HEAP(int *A,int i,int heap_size) { int l,r,largest=0; l=left_place(i); r=right_place(i); if (l>heap_size) { return; } if (l<=heap_size&&A[l]>A[i]) { largest=l; } else largest=i; if (r<=heap_size&&A[r]>A[largest]) { largest=r; } if (largest!=i) { swap_two(A[i],A[largest]); Max_HEAP(A,largest,heap_size); } else { i++; Max_HEAP(A,i,heap_size); } } void build_HEAP(int *A,int len) { for (int i=len/2;i>=1;i--) { Max_HEAP(A,i,len); } } void Heap_sort(int *A,int len) { build_HEAP(A,len); for (int i=len;i>=2;i--) { swap_two(A[1],A[i]); len--; Max_HEAP(A,1,len); } } int main() { int n; cout<<"input sort numbers\n"; cin>>n; int *A=new int[n+1]; for (int i=1;i<=n;i++) { cin>>A[i]; } build_HEAP(A,n); cout<<"print HEAPED data \n"; for (int i=1;i<=n;i++) { cout<<A[i]<<" "; } cout<<endl; cout<<"Heap_sort data \n"; Heap_sort(A,n); for (int i=1;i<=n;i++) { cout<<A[i]<<" "; } cout<<endl; return 0; }
相关文章推荐
- 插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 【算法导论】c++实现堆排序
- 【算法导论】10.1-5单数组实现双端队列
- 二叉树-----数组存储结构及操作算法的实现------堆排序
- 算法导论------------栈(stack)简单的数组实现
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- 从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章
- c++堆排序实现(heapsort) (算法导论)
- 算法导论之最大子数组问题 C语言实现
- [算法导论-分治策略]求最大子数组之各种解法及源代码实现
- 【算法导论学习-17】stack的数组实现
- 算法导论 堆排序 C语言实现
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- 【算法导论学习-18】queue的数组实现