成绩 | 10 | 开启时间 | 2018年11月25日 星期日 18:00 |
折扣 | 0.8 | 折扣时间 | 2018年12月15日 星期六 23:55 |
允许迟交 | 否 | 关闭时间 | 2018年12月25日 星期二 23:55 |
实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<stdio.h>
#include<stdlib.h>
int heap[200];
int length;
void HeapAdjust(int x,int t)
{
//i代表现在为止,j代表左右子树位置
int i,j,up;
i=x;
j=2*i;
up=heap[i];
while(j<=t)
{ if(j<t&&heap[j]<heap[j+1])
j++;
if(up<heap[j])
{ heap[i]=heap[j];
i=j;
j=2*i;
}
else
{ j=t+1;
}
}
heap[i]=up;
}
// void HeapAdjust( int x, int y)
// {
// int rc=heap[x];
// for(int j=2*x;j<=y;j*=2){
// if(j<y && rc < heap[j])
// j++;
// if(rc < heap[j])
// break;
// heap[x]=heap[j];
// x=j;
// }
// heap[x]=rc;
// heap[1]=heap[y];
// }
void HeapSort()
{
int i;
for(i = length/2; i>0; i--){
HeapAdjust(i,length);
}
}
int main()
{
scanf("%d",&length);
for(int i=1; i<=length ;i++)
scanf("%d",&heap[i]);
for(int q = 0; q < 3; q++){
HeapSort();
for(int i=1;i<=length;i++)
printf("%d ",heap[i]);
printf("\n");
int temp = heap[1];
heap[1] = heap[length];
heap[length] = heap[1];
length--;
}
return 1;
}