#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;
}
堆排序实现详解
本文介绍了一种使用C语言实现的堆排序算法,详细展示了如何通过调整堆结构来完成排序过程。该程序首先让用户输入需要排序的数据数量及具体内容,然后利用堆排序算法进行排序,并输出排序后的结果。
31万+

被折叠的 条评论
为什么被折叠?



