算法导论_堆排序
2014-12-08 21:00
169 查看
先是根据算法导论堆排序伪代码写的代码:
#include<cstdio> #define lson (i<<1) #define rson (i<<1|1) const int N=60; void SWAP(int &a,int &b) {int t=a;a=b;b=t;} void max_heapify(int A[],int i,int asize) { int largest; //从parent,ron,lson中选出最大的并赋给parent结点 if(lson<=asize&&A[lson]>A[i]) largest=lson; else largest=i; if(rson<=asize&&A[rson]>A[largest]) largest=rson; if(largest!=i) { SWAP(A[i],A[largest]); max_heapify(A,largest,asize); } } void build_max_heap(int A[],int asize) { for(int i=asize>>1;i>=1;i--) max_heapify(A,i,asize); } void heapsort(int A[],int asize) { build_max_heap(A,asize); //循环中,每次把根节点的值与最后面的点的值交换,并移除交换后的最后那个结点,直到只剩下1个点,循环结束 for(int i=asize;i>=2;i--) { SWAP(A[1],A[i]); --asize; max_heapify(A,1,asize);//asize 每循环一次减一,作用相当于移除最后那个结点 } } int main() { int A[N+10]; for(int i=1;i<=N;i++) scanf("%d",&A[i]); heapsort(A,N); for(int i=1;i<=N;i++) printf("%d\n",A[i]); }
相关文章推荐
- 堆排序(最大堆[1])--【算法导论】
- 堆排序(依据算法导论伪代码)
- 堆排序(最大堆进阶)--【算法导论】
- 堆排序(算法导论实现)
- 算法导论 第六章 堆排序
- 堆排序--算法导论
- algorithm: heap sort in python 算法导论 堆排序
- 算法导论第六章堆排序(一)
- c++堆排序实现(heapsort) (算法导论)
- 数组实现堆排序(来源算法导论)
- 堆排序(算法导论第六章)
- 【算法导论实验3】堆结构与堆排序
- 【算法导论】之堆排序
- MIT:算法导论——4.1.排序和顺序统计量_堆排序
- 学习算法导论——堆排序
- 【算法导论】堆排序
- 【算法导论】堆排序
- 【算法导论】排序 (二):堆排序
- 【算法导论】堆排序
- 算法导论 习题6.2-5 用迭代法实现堆排序