#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);}