堆排序(算法导论)
2014-08-29 16:53
330 查看
#include<stdio.h> #include<math.h> #define OK 1 int build_max_heap(int[],int); int main(){ int A[]={4,1,3,2,16,9,10,14,8,7}; int length=10; //build_max_heap(A,length); heap_sort(A,length); int i; for(i=0;i<length;i++) printf("%d ",A[i]); printf("\n"); return 0; } int max_heapify(int A[],int i,int length){ int heap_size=length; int l=2*i+1; int r=2*i+2; int largest; 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){ int temp=A[largest]; A[largest] = A[i]; A[i] =temp; max_heapify(A,largest,heap_size); } return OK; } int build_max_heap(int A[],int length){ int i; for(i=(int)floor((length-1)/2);i>=0;i--) max_heapify(A,i,length); return OK; } int heap_sort(int A[],int length){ build_max_heap(A,length); int heap_size=length-1; int i; for(i=length-1; i >=1;i--){ heap_size-=1; int temp=A[0]; A[0]=A[i]; A[i]=temp; max_heapify(A,0,heap_size); } return OK; }
相关文章推荐
- 2011-03-06 算法导论 第8章 线性时间排序
- 算法导论1:插入排序和归并排序 2016.1.1
- 【算法导论】线性时间排序之 决策树&计数排序
- 插入排序【算法导论】
- 算法导论-8-3-排序不同长度的数据项
- 【算法导论】快速排序
- 算法导论之三:快速排序
- 【算法导论】2-1 插入排序insertion-sort.cpp
- 算法导论6.5-8堆排序-K路合并
- 算法导论——排序复习
- 【算法导论】第八章之基数排序
- 排序及相关三(算法导论PS1-3)
- 【算法导论】第6章堆排序及利用堆建立最小优先级队列
- 算法导论-8-3-排序不同长度的数据项
- 「算法导论」:插入排序
- 再读算法导论,排序一(归并排序)。
- 【算法导论】快速排序java实现
- 【算法导论笔记】排序
- 读书笔记 算法导论 快速排序 QuickSort 使用最后一个元素作为pivot
- 算法导论第六章堆排序所给的伪代码转换具体程序