数据结构 堆排序

数据结构  堆排序
数据结构  堆排序

佛山科学技术学院

实验报告

课程名称数据结构

实验项目实现典型的排序算法

专业班级 09计算机(1)班姓名梁志恒学号________2009314138________

指导教师黄营成绩____________ 日期________ _______

题目:请编程实现堆排序算法。

#include

#define maxsize 100

typedef struct

{

int key[maxsize];

int length;

}SqList;

//堆排序大根堆

void HeapAdjust(SqList *L,int s,int m)

{

int j;

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];

}

void HeapSort(SqList *L)

{

//对顺序表key进行堆排序

int i;

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);

}

}

void main()

{

SqList L;

int i,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.请为所建立的堆选择适合的数据结构。

链式存储结构

typedef struct BiTNode

{

int data;

struct BiTNode *lchild,* rchild;

}BiTNode , *BiTree;

顺序存储结构

#define maxsize 100

typedef struct

{

int key[maxsize];

int length;

}SqList;

2.给出如下12个数字,请画出建立小根堆的过程。

36,47,58,12,17,22,97,10,21,28,72,80

36,47,58,12,17,22,97,10,21,28,72,80

3.请画出从小根堆输出升序序列的过程。

输出 10

相关主题
相关文档
最新文档