数据结构课程设计 设计说明书 学生姓名 学号 班级 成绩 指导教师 计算机科学与技术系 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..n-1].keys≤R[n].key。 ③由于交换后新的根 R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将 R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的 无序 区R[1..n-2] 和 有 序 区R[n-1..n] , 且仍满 足 关 系R[1..n-2].keys≤R[n-1..n].keys,同样 要将 R[1..n-2]调整为堆。 要求 :(1)给 出 一个符 合 堆序列的一组 数,能够 建立 大根堆和小根堆。 (2)界 面 友 好 ,可操 作 性强 。 (3)能够 实现数据个数的变 化 输 入 ,并 建立 相 应的堆。 指 导 教 师 (签 字): 教 研 室 主任(签 字): 批 准 日期: 年 月 日 摘 要 设计了一个堆排序算法实现的程序,此程序具有排序的功能,能...