1 #include <stdio.h>
2 typedef int KeyT;
3 typedef int ElemType;
4 typedef struct
5 {
6 KeyT key;
7 ElemType data;
8 }ST;
9 void Sift(ST R[],int low,int high)
10 {
11 int i=low,j=2*i;
12 ST t=R[i];
13 while(j<=high)
14 {
15 if(j<high&&R[j].key<R[j+1].key)
16 j++;
17 if(t.key<R[j].key)
18 {
19 R[i]=R[j];
20 i=j;
21 j=2*i;
22 }
23 else break;
24
25 }
26 R[i]=t;
27 }
28 void HS(ST R[],int n)
29 {
30 int i;
31 ST t;
32 for(i=n/2;i>=1;i--)
33 Sift(R,i,n);
34 for(i=n;i>=2;i--)
35 {
36 t=R[1];
37 R[1]=R[i];R[i]=t;
38 Sift(R,1,i-1);
39 }
40 }
41 int main()
42 {
43 ST R[100];
44 KeyT A[]={75,87,68,92,88,61,77,96,80,72};
45 int i,n=10;
46 for(i=0;i<n;i++)
47 R[i+1].key=A[i];
48 HS(R,n);
49 printf("排序结果:");
50 for(i=1;i<=n;i++)
51 printf("%3d",R[i].key);
52 printf("\n");
53 }