王道考研 堆排序 可执行代码 C++
直接上代码
#include <iostream>
using namespace std;
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 CreateHeap(int A[],int len){
for (int i=len/2;i>0;i--){
HeadAdjust(A,i,len);
}
}
void HeapSort(int A[],int len){
CreateHeap(A,len);
for (int i=len;i>0;i--){
cout<<A[1]<<" ";
swap(A[i],A[1]);
HeadAdjust(A,1,i-1);
}
}
int main(){
int x;
int A[]={x,99,8,9,6,2,7};//x相当于一个哨兵
HeapSort(A,6);
return 0;
}
运行结果