堆排序 max_heapify 调整堆函数

有点时间 想研究一下堆排序,看了一下算法导论,现在记录一下

max_heapify() 函数是堆排序中的一个非常重要的方法

 

#include using namespace std; int a[15]={0,27,17,3,16,13,10,1,5,7,12,4,8,9,0}; int size=15; int length=15; int left(int i){return i*2;} int right(int i){return i*2+1;} int parent(int i){return i/2;} void swap(int &a,int &b){int tem=a;a=b;b=tem;} /* 保持堆的性质,函数验证标号为i个元素,查看其是否符合最大(小)堆的性质,如果不满足就调整它的以其子节点为根节点的最大(小)堆, 最终保持这个堆依然是一个最大(小)堆 */ void max_heapify(int *a,int i) { int l=left(i),r=right(i),largest; if(l<=size&&a[l]>a[i]) largest=l; else largest =i; if(r<=size&&a[r]>a[largest]) largest=r; if(largest!=i){ swap(a[largest],a[i]); max_heapify(a,largest); } } void max_heapify2(int *a,int i)//迭代法 { int l,r,largest; for(int j=i;ja[j]) swap(a[j],a[l]); if(r<=size&&a[r]>a[j]) swap(a[j],a[r]); return; } } } int main() { for(int i=1;i

你可能感兴趣的:(算法导论)