成绩 | 10 | 开启时间 | 2017年11月22日 星期三 08:00 |
折扣 | 0.8 | 折扣时间 | 2017年12月15日 星期五 23:55 |
允许迟交 | 否 | 关闭时间 | 2018年01月8日 星期一 23:55 |
实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<stdio.h>
int heap[100];
int size;
void print(int index)
{
for (int i = 1; i <= index; i++)
{
printf("%d ",heap[i]);
}
printf("\n");
}
void tiaozheng(int index)
{
int i, child;
for (i = index; 2 * i <= size; i = child)
{
child = 2 * i;
if (child != size&&heap[child + 1] > heap[child])
child++;
if (heap[child] > heap[i])
{
int tmp = heap[i];
heap[i] = heap[child];
heap[child] = tmp;
}
}
}
void Delete()
{
int i, child;
int maxenode = heap[1];
int lastnode = heap[size--];
for (i = 1; 2 * i <= size; i = child)
{
child = 2 * i;
if (child != size&&heap[child + 1] > heap[child])
child++;
if (heap[child] > lastnode)
heap[i] = heap[child];
else
break;
}
heap[i] = lastnode;
}
int main()
{
heap[0] = 100;
//freopen("1.txt", "r", stdin);
int node;
scanf("%d",&size);
int i = 1;
while (scanf("%d", &node) != EOF)
{
heap[i++] = node;
}
//建堆
for (i = size/ 2; i>=1; i--)
{
tiaozheng(i);
}
print(size);
Delete();
print(size);
Delete();
print(size);
return 0;
}