void Swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void HeadAdjust(int A[],int k,int len){
A[0]=A[k]; //0号哨兵
for(int i=k*2;i<=len;i=i*2){ //和孩子比较大小
if(i<len&&A[i]<A[i+1]) //2k左孩子,2k+1右孩子
i++;
if(A[0]>=A[i])
break;
else{
A[k]=A[i];
k=i;
}
}
A[k]=A[0];
}
void BuildMaxHeap(int A[],int len){
for(int i=len/2;i>0;i--) //到1结束
HeadAdjust(A,i,len);
}
void HeapSort(int A[],int len){
BuildMaxHeap(A,len);
for(int i=len;i>1;i--){ //元素1用来比较的
Swap(A[1],A[i]); //末尾补齐到1号位
HeadAdjust(A,1,len-1); //每一次出一个最大的到末尾
}
}
【8 排序】堆排序。
于 2022-11-03 01:03:26 首次发布