void HeapAdjust(SqList &L,int s,int m){
ElemType rc=L.r[s];
for (int j=2*s;j<=m;j*=2){
if(j<m&&L.r[j].key<L.r[j+1].key){
j++;
}
if(rc.key>=L.r[j].key){
break;
}
L.r[s]=L.r[j];
s=j;
}
L.r[s]=rc;
}
void CreatHeap(SqList &L){
int n=L.length;
for (int i=n/2;i>0;i--){
HeapAdjust(L,i,n);
}
}
void HeapSort(SqList &L){
CreatHeap(L);
for (int i=L.length;i>1;i--){
ElemType x=L.r[1];
L.r[1]=L.r[i];
L.r[i]=x;
HeapAdjust(L,1,i-1);
}
}
PTA 6-9 堆排序
最新推荐文章于 2024-06-03 19:59:27 发布
该博客介绍了如何使用堆排序算法对顺序表进行排序。首先通过`HeapAdjust`函数调整堆,确保父节点的键值大于或等于其子节点。然后`CreatHeap`函数从中间开始对整个序列构建最大堆。最后,在`HeapSort`中,通过交换堆顶元素与末尾元素并重新调整堆,完成排序过程。
摘要由CSDN通过智能技术生成