#include<iostream>
using namespace std;
void adjustHeap(int a[], int n, int id)//{
int Min;
while(2*id+1<n){
Min=2*id+1;
if(2*id+2<n){
if(a[2*id+1] > a[id*2+2]){
Min=id*2+2;
}
}
if(a[id]<a[Min]){
break;
}else{
swap(a[id],a[Min]);
id=Min;
}
}
}
void buildHeap(int a[], int n)/*建立小顶堆*/{
for(int i = n /2 -1; i >= 0; i--) {
adjustHeap(a,n,i);
}
}
void HeapSort(int a[],int n){
buildHeap(a,n);
for(int i=n-1;i>=0;i--){
swap(a[0],a[i]);
n--;
adjustHeap(a,n,0);
}
}
int main(){
int a[12];
while(1){
int nn;
cin>>nn;
for(int i=0;i<nn;i++){
cin>>a[i];
}
HeapSort(a,nn);
for(int i=0;i<nn;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布