//堆排序,明天更新
void BuildMaxHeap(ElemType A[],int len){
for(int i=len/2;i>0;i--) //调整堆
AdjustDown(A,i,len);
}
void AdjustDown(ElemType A[],int k,int len){
A[0]=A[k];
for(i=2*k;i<=len;i*=2)//i初值指向左孩子,自上而下的筛选过程
{
if(i<len&&a[i]<a[i+1])
{
i++; //取key值较大的子节点的下标?
}
if(A[0]>=A[i]) //已找到插入位置,筛选结束
break;
else
{
A[k]=A[i]; //将A[i]调整到双亲节点上
k=i; //修改k值,以便继续向下筛选
}
}
A[k]=A[0]; //被筛选的节点放入最终位置
}
堆排序
最新推荐文章于 2023-05-28 11:19:59 发布