#include<iostream> using namespace std; void Adjust(int k[],int i,int n) { int j; int temp; temp=k[i]; j=2*i; while(j<=n) { if(j<n&&k[j]<k[j+1]) j++; if(temp>=k[j]) break; k[j/2]=k[j]; j=2*j; } k[j/2]=temp; } void Heapsort(int k[],int n) { int i; int temp; for(i=n/2;i>=1;i--) Adjust(k,i,n);//将原排序调整为一个堆积 for(i=n-1;i>=1;i--) { temp=k[i+1]; k[i+1]=k[1]; k[1]=temp; Adjust(k,1,i); //交换第一个和最后一个元素以后再把它调整问你堆积, //这个比第一次调整简单因为除了根结点其它都是排好序的子堆积。好好体会 } } int main() { int k[11],i; for(i=1;i<11;i++) cin>>k[i]; Heapsort(k,10); for(i=1;i<11;i++) cout<<k[i]<<" "; cout<<endl; return 0; }