//堆排序 大根堆
#include <cstdio>
//输出列表
void PrintList(int A[]){
for(int i=1;i<13;i++){
printf("%d ",A[i]);
}
printf("\n");
}
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];
for(int i=2*k;i<=len;i*=2){
if(i<len&&A[i]<A[i+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--){
HeadAdjust(A,i,len);
}
}
void HeapSort(int A[],int len){
BuildMaxHeap(A,len);
printf("大根堆序列为: ");
PrintList(A);
for(int i=len;i>1;i--){
Swap(A[i],A[1]);
HeadAdjust(A,1,i-1);
}
}
int main(){
int A[13]={0,32,5,6,88,56,4,1,53,5,645,7,43} ;
printf("原始序列为: ");
PrintList(A);
HeapSort(A,12);
printf("排序后序列为: ");
PrintList(A);
return 0;
}
堆排序(C++)
最新推荐文章于 2024-07-24 08:30:00 发布