数据结构堆排序.docx
《数据结构堆排序.docx》由会员分享,可在线阅读,更多相关《数据结构堆排序.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构堆排序
佛山科学技术学院
实验报告
课程名称数据结构
实验项目实现典型的排序算法
专业班级09计算机
(1)班姓名梁志恒学号________2009314138________
指导教师黄营成绩____________日期_______________
题目:
请编程实现堆排序算法。
#include
#definemaxsize100
typedefstruct
{
intkey[maxsize];
intlength;
}SqList;
//堆排序大根堆
voidHeapAdjust(SqList*L,ints,intm)
{
intj;
L->key[0]=L->key[s];
for(j=2*s;j<=m;j=2*j)
{
if(jkey[j]>L->key[j+1])
j++;
if(!
(L->key[0]>L->key[j]))
break;
L->key[s]=L->key[j];
s=j;
}
L->key[s]=L->key[0];
}
voidHeapSort(SqList*L)
{
//对顺序表key进行堆排序
inti;
for(i=L->length/2;i>0;i--)
HeapAdjust(L,i,L->length);
for(i=L->length;i>1;i--)
{
L->key[0]=L->key[1];
L->key[1]=L->key[i];
L->key[i]=L->key[0];
HeapAdjust(L,1,i-1);
}
}
voidmain()
{
SqListL;
inti,s=1;
printf("元素的个数length=");
scanf("%d",&(L.length));
for(i=1;i<=L.length;i++)
{
scanf("%d",&(L.key[i]));
}
HeapSort(&L,s,L.length);
printf("排序后:
\n");
for(i=1;i<=L.length;i++)
printf("%d",L.key[i]);
printf("\n");
}
1.请为所建立的堆选择适合的数据结构。
链式存储结构
typedefstructBiTNode
{
intdata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
顺序存储结构
#definemaxsize100
typedefstruct
{
intkey[maxsize];
intlength;
}SqList;
2.给出如下12个数字,请画出建立小根堆的过程。
36,47,58,12,17,22,97,10,21,28,72,80
3.请画出从小根堆输出升序序列的过程。
\