#include <iostream>using namespace std;#define  MAXSIZE  20                              typedef struct{    int key;    char *otherinfo;}ElemType;                       typedef struct{    ElemType *r;                                     int  length;                                }SqList;                                        //筛选法调整堆void HeapAdjust(SqList &L,int s,int m){     ElemType rc;    int j;    rc=L.r[s];    for(j=2*s;j<=m;j*=2){                                                    if(j<m&&L.r[j].key<L.r[j+1].key) ++j;            if(rc.key>=L.r[j].key) break;                      L.r[s]=L.r[j]; s=j;     }    L.r[s]=rc;                                      }                                void Create_Sq(SqList &L){    int i,n;    cout<<"数据个数:";    cin>>n;                                            cout<<"待排序的数据:";    for(i=1;i<=n;i++){        cin>>L.r[i].key;        L.length++;    }}//建初堆void CreatHeap(SqList &L){    int i,n;    n=L.length;    for(i=n/2;i>0;--i)                               HeapAdjust(L,i,n);}                    //堆排序void HeapSort(SqList &L){     int i;    ElemType x;    CreatHeap(L);                                      for(i=L.length;i>1;--i){         x=L.r[1];                                       L.r[1]=L.r[i];                    L.r[i]=x;         HeapAdjust(L,1,i-1);                       }}void show(SqList L){    int i;    for(i=1;i<=L.length;i++)        cout<<L.r[i].key<<" ";}int main(){    SqList L;    L.r=new ElemType[MAXSIZE+1];    L.length=0;    Create_Sq(L);    HeapSort(L);    cout<<"   堆排序   :";    show(L);}