文章标题
2017-11-26 16:35
148 查看
void BuildMaxHeap(ElemType A[],int len){ for(int i = len/2 ; i > 0 ; i--) //从i= [n/2]~1,反复调整堆 AdjustDown(A,i,len); } void AdjustDown(ElemType A[],int k ,int len){ //函数AdjustDown将元素向下进行调整 A[0] = A[k]; //A[0]暂存 for(i = 2*k ; i <= len ; i*=2){ //沿key较大的子节点向下筛选 if(i < len && A[i] < A[i+1]) i++; //取key较大的子节点的下标 if(A[0] >= A[i]) break; //筛选结束 else{ A[k] = A[i]; k = i; } }//for A[k] = A[0]; //被筛选结点的值放在最终位置。 } void HeapSort(ElemType A[],int len){ BuildMaxHeap(A,len); //初始建堆 for(i = len ; i > 1 ; i--){ //n-1趟的交换和建堆过程 Swap(A[i],A[1]) //输出堆顶元素(和堆底元素交换) AdjustDown(A,1,i-1); //整理,把剩余的i-1个元素整理成堆 }//for }