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