数据结构课程设计 设计说明书 学生姓名 学号 班级 成绩 指导教师 计算机科学与技术系 2011 年 3 月 4 日 堆排序的算法的实现 数据结构课程设计评阅书 题目 堆排序原理的算法的实现 学生姓名 学号 指导教师评语 成绩: 指导教师签名: 年 月 日 答辩教师评语 成绩: 答辩教师签名: 年 月 日 教研室意见 成绩: 室主任签名: 年 月 日 注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入
课程设计任务书 2010 —2011 学年第 二 学期 专业: 学号: 姓名: 课程设计名称: 数据结构课程设计 设计题目: 堆排序算法的实现 完成期限:自 2011 年 2 月 19 日至 2011 年 3 月 4 日共 2 周 设计依据、要求及主要内容(可另加附页): 堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字
如关键字序列(10,15,56,25,30,70)和(70,56,30,25,15,10)分别满足堆性质(1)和(2),故它们均是堆
大根堆和小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆
根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆
注意:①堆中任一子树亦是堆
②以上讨论的堆实际上是二叉堆(Binary Heap), 大根堆排序的基本思想: ① 先将初始文件 R[1
n]建成一个大根堆,此堆为初始的无序区
② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1
n-1]和有序区R[n],且满足 R[1
keys≤R[n]
③由于交换后新的根 R[1]可能违反堆性质,故应将当前无序区R[1
n-1]调整为堆
然后再次将 R