#include < stdio.h > #define MAX 100 typedef struct rec ... { int key;} sqlist[MAX]; void sift(sqlist r, int l, int n) ... { int i = l, j = 2 * i; struct rec x = r[i]; while(j <= n) //Do you know how important the equal is? ...{ if(j < n && r[j].key < r[j + 1].key) j++; if(x.key < r[j].key) ...{ r[i] = r[j]; i = j; j = 2 * i; } else break; } r[i] = x;} void heapsort(sqlist r, int n) ... { struct rec temp; for(int i = n / 2; i >= 1; i--) sift(r, i, n); for(int j = n; j > 1; j--) ...{ temp = r[1]; r[1] = r[j]; r[j] = temp; sift(r, 1, j - 1); }} int main() ... { sqlist list; int n; printf("请输入要排序的数的个数:"); scanf("%d", &n); printf("依次输入%d个数 ", n); for(int i = 1;i <= n; i++) scanf("%d", &list[i].key); heapsort(list, n); printf("经过排序后的数列如下 "); for(int j = 1; j <= n; j++) printf("%4d", list[j].key); printf(" "); return 0;}