《算法导论》(二)--堆排序
2010-09-21 08:45
155 查看
中间计算复杂度与递归式太晕了,看的不甚明白,现在自感功力不够,修为不够,以后回头再看。。
终于弄明白了堆排序的方法。。调整堆有点麻烦,记得时刻保持堆的性质就好了。。
终于弄明白了堆排序的方法。。调整堆有点麻烦,记得时刻保持堆的性质就好了。。
#include <iostream> using namespace std; #define LENGTH 10 int heap_size=0,size=LENGTH; void max_heapify(int array[],int i) {//下标的问题要注意 int l=(i<<1)+1; int r=(i<<1)+2; int largest; if(l<heap_size&&array[l]>array[i]) { largest=l; } else { largest=i; } if(r<heap_size&&array[r]>array[largest]) { largest=r; } if(largest!=i) { swap(array[i],array[largest]); max_heapify(array,largest); } } void build_max_heap(int array[]) { heap_size=size; for (int i=(size%2==0?size/2-1:size/2);i>=0;i--) {//当对某结点调用MAX_heapify时,该结点的两棵子树都已是最大堆 //为什么不是从0开始??递归定义结构决定。 max_heapify(array,i); } } void heap_sort(int array[]) { build_max_heap(array); for (int i=LENGTH-1;i>=1;i--) { swap(array[0],array[i]); heap_size=heap_size-1; size--; max_heapify(array,0);//根结点下标为0 } } int main() { int array[]={4,1,3,2,16,9,10,14,8,7}; heap_sort(array); for (int i=0;i<LENGTH;i++) { cout<<array[i]<<" "; } cout<<endl; }
相关文章推荐
- 《算法导论》笔记---第6章 堆排序
- 算法导论笔记(一) :堆排序
- 算法导论---第6章---堆排序
- 算法导论(二)堆排序
- 《算法导论》第6章 堆排序 (3)K路归并
- 《算法导论》第6章 堆排序 (4)Young氏矩阵
- 《算法导论》读书笔记--堆排序
- 算法导论-堆排序学习笔记
- 算法导论:堆排序
- 算法导论--堆排序(堆维护,建堆,堆排序)
- 《算法导论》堆排序和优先队列
- 《算法导论》之堆排序学习心得
- 算法导论第六章 堆排序
- 《算法导论》学习心得(四)—— 堆排序(Java)
- 算法导论:堆排序(java实现)
- 算法导论代码 第6章 堆排序
- 《算法导论》第6章 堆排序 (3)K路归并
- 《算法导论》第6章 堆排序 (4)Young氏矩阵
- 算法导论堆排序Java实现
- 算法导论:堆排序的应用---优先级队列