




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理学院 课程设计说明书 课 程 名 称 数据结构与算法 A 设计实践 课 程 代 码 6015059 题 目 三 排序综合 开 始 时 间 2015 年 12 月 28 日 完 成 时 间 2016 年 01 月 10 日 课程设计成绩 学习态度及平 时成绩 30 技术水平与实际 能力 20 创新 5 说明书撰写质量 45 总 分 100 指导教师签名 年 月 日 西华大学理学院课程设计说明书 数据结构与算法 A 设计实践任务书 学院名称 理学院 课程代码 6015059 专业 信科 年级 2012 一 设计题目 排序综合 限最多 1 人完成 二 主要内容 利用随机函数产生 N 个随机整数 20000 以上 对这些数进行多种方法进行排序 三 具体要求及提交的材料 1 至少采用 4 种方法实现上述问题求解 提示 可采用的方法有插入排序 希尔排序 起泡 排序 快速排序 选择排序 堆排序 归并排序 并把排序后的结果保存在不同的文件中 2 统计每一种排序方法的性能 以上机运行程序所花费的时间为准进行对比 找出其中两 种较快的方法 如果采用 4 种或 4 种以上的方法者 可适当加分 测试数据及测试结果请在上交的资料中写明 必须上机调试通过 按 数据结构课程设计大纲 中的要求完成课程设计报告格式 设计结束后 每个学生必须上交的材料有 1 课程设计报告 打印稿一份 2 课程设计的源代码电子文档一份 四 主要技术路线提示 无 五 进度安排 共计两周时间 建议进度安排如下 1 选题 应该在上机实验之前完成 2 需求分析 概要设计可分配 4 学时完成 2 详细设计可分配 4 学时 4 调试和分析可分配 10 学时 2 学时的机动 可提前安排部分提前结束任务的学生答辩 六 推荐参考资料 1 冯博琴 等编著 软件技术基础 修改版 西安交通大学出版社 1997 2 严蔚敏 等著 数据结构 清华大学出版社 2003 3 李芸芳 等著 软件技术基础 第二版 清华大学出版社 2000 4 徐孝凯 等著 数据结构 C 语言描述 清华大学出版社 2004 指导教师 签名日期 年 月 日 系 主 任 审核日期 年 月 日 西华大学理学院课程设计说明书 目 录 摘 要 1 1 引 言 2 2 系统分析 3 2 1 功能需求 3 2 1 1 总体要求 3 2 1 2 本人所做模块 3 2 2 数据需求 3 3 详细设计与分析 4 3 1 设计思路 4 3 2 整体设计方案 5 3 3 各种操作函数 6 3 4 主函数 6 3 5 编码 9 4 测试系统 13 4 1 设计测试数据 14 4 2 测试结果与分析 14 结 论 16 致 谢 17 参考文献 18 附录 19 排序综合 1 摘 要 排序 sorting 是计箅机程序设计的一种重要操作 它的功能是将一组任意顺序数 据元素 记录 根据某一个 或几个 关键字按一定的顺序里新排列成为有序的序列 由于待排序的记录数量不同 使得排序过程中涉及的存储器的不同 可将排序方法分 为两大类 一类是内部排序 指的是待排序的记录存放在计算机随机存储器中进行的 排序过程 另一类是外部排序 指的是待排序记录的数量很大 以致内存一次不能容 纳全部记录 在排序过程中尚需要对外存进行访问的排序过程 本次课程设计主要是 关于内部排序的 内部排序的方法很多 但就其全面性能而言 很难提出一种被认为是最好的方法 每一种方法都有各自的优缺点 适合在不同的环境 如记录的初始排列状态等 下使 用 本次课程设计就是内部排序中的几个常用排序方法 分析了排序的实质 排序的 应用 排序的分类 利用 C 语言采用数组存储结构编程实现了本排序综合系统 该系统 包含了几种常见的排序方法 有直接插入排序 希尔排序 冒泡排序 快速排序 简 单排序 关键词 关键词 内部排序 外部排序 重新排列 关键字 西华大学理学院课程设计说明书 2 1 引 言 1 1 问题的提出 排序是计算机内经常进行的一种操作 其目的是将一组 无序 的记录序列调整 为 有序 的记录序列 分内部排序和外部排序 若整个排序过程不需要访问外存便 能完成 则称此类排序问题为内部排序 反之 若参加排序的记录数量很大 整个序 列的排序过程不可能在内存中完成 则称此类排序问题为外部排序 内部排序的过程 是一个逐步扩大记录的有序序列长度的过程 排序算法是数据结构学科经典的内容 其中内部排序现有的算法有很多种 其中 包含冒泡排序 直接插入排序 简单选择排序 希尔排序 快速排序 堆排序等 各 有其特点 对排序算法比较的分析可以遵循若干种不同的准则 通常以排序过程所需要的算 法步数作为度量 有时也以排序过程中所作的键比较次数作为度量 特别是当作一次 键比较需要较长时间 例如 当键是较长的字符串时 常以键比较次数作为排序算法 计算时间复杂性的度量 当排序时需要移动记录 且记录都很大时 还应该考虑记录 的移动次数 究竟采用哪种度量方法比较合适要根据具体情况而定 在下面的讨论中 我们主要考虑所用时间作为复杂性的度量 1 2C 语言 C 语言既有高级语言的特点 又具有汇编语言的特点 既是一个成功的系统设计语 言 有时一个使用的程序设计语言 既能用来编写不依赖计算机硬件的应用程序 又 能用来编写各种系统程序 是一种受欢迎 应用广泛的程序设计语言 1 3C 语言发展过程 1973 年 美国贝尔实验室的 D M RITCHIE 在 B 语言的基础上最终设计出了一种新 的语言 他取了 BCPL 的第二个字母作为这种语言的名字 这就是 C 语言 1977 年 Dennis M Ritchie 发表了不依赖于具体机器系统的 C 语言编译文本 可 移植的 C 语言编译程序 1978 年 Brian W Kernighian 和 Dennis M Ritchie 出版了名著 The C Programming Language 从而使 C 语言成为目前世界上流行最广泛的高级程序设计语 言 排序综合 3 1 4 任务与分析 前面分析了排序的种类以及过程 因此 本系统实现了几种常用的排序方法 包 括 直接插入排序 希尔排序 冒泡排序 非递归的快速排序 简单排序 2 系统分析 2 1 功能需求 2 1 1 总体要求 任务 机函数产生 N 个随机整数 20000 以上 对这作数进行多种方法进行排序 要求 1 至少采用 4 种方法实现上述问题求解 提示 可采用的方法有插入排序 希尔 排序 起泡排序 快速排序 选择排序 堆排序 归并排序 并把排序后的结果保 存在不同的文件中 2 统计每一种排序方法的性能 以上机运行程序所花费的时间为准进行对比 找出其中两种较快的方法 如果采用 4 种或 4 种以上的方法者 可适当加分 2 1 2 本人所做模块 通过对任务的要求分析 我将任务分成了几个模块 从而实现了任务的总体要求 包括了输入模块 选择排序方法模块 输出模块 其中 1 输入模块 利用随机函数产生 N 个数 20000 以上 产生的数据个数由用户自己输入 2 选择排序方法模块 在菜单中通过输入相应的选项编号来选择采用何种算法排序 包括的排序算法有 直接插入排序 希尔排序 冒泡排序 快速排序 简单排序 3 输出模块 输出排序前的 或者排序后的数据元素到屏幕上显示 并且输出以某种算法排序 后的数据元素到文件中保存 最后让主函数对这几个模块进行调用 从而实现全部功能 西华大学理学院课程设计说明书 4 2 2 数据需求 利用随机函数产生的随机数 3 详细设计与分析 3 1 设计思路 1 直接插入排序 思路 设有一组关键字 K1 K2 Kn 排序开始便认为 K1 是一个有序的序 列 让 K2 插入到表长为 1 的有序序列 使之成为一个表长为 2 的有序序列 让 K3 插 入到表长为 2 的有序序列 使之成为个表长为 3 的有序序列 依次类推 最后让 Kn 插 入上述表长为 n 1 的有序序列 得到一个表长为 n 的冇序序列 2 希尔排序 思路 先取一个正整数 dl dl n 把全部记录分成 dl 个组 所有距离为 dl 的倍 数的记录看成是一组 然后在各组内进行插入排序 然后取 d2 d2 dl 重复上述分组和 排序操作 直到取 di 1 即所有记录成为一个组为此 一般选 dl 约为 n 2 d2 为 dl 2 di l 3 冒泡排序 思路 依次比较相邻的两个数 将小数放在前面 大数放在后面 即在第一趟 首先比较第 n 个和第 n 1 个数 将小数放前 大数放后 然后比较第 n 1 个数和 第 n 2 个数 将小数放前 大数放后 如此继续 直至比较最后两个数 将小数 放前 大数放后 至此第一趟结束 将最小的数放到 了最前 在第二趟 仍从第 n 个数开始比较 将小数放前 大数放后 一直比较到第二个数 第一的位置上 已经是最小的 第二趟结束 在数第 二的位置上得到一个新的 最小数 其实 在整个数列中 是第二小的数 如此下去 重复以上过程 直至最终完成排序 用二循环实现 外循环变 量设 i 内循环变量设为 j 每次进行比较的两个元素 都是与内循环 j 有关的 它们可以分别 用 a j 和 a j 1 标识 4 快速排序 思路 以第一个关键字 K1 为控制字 将 K1 K2 Kn 分成两个子区 使左区的所有 关键字小于等于 K1 右区所有关键字大于等于 K1 在子区内数据尚处于无序状态 将右区首 尾指针保存入栈 对左区进行与第 1 步相类似的处理 又得到它的 左子区和右子区 排序综合 5 重复第 1 2 步 直到左区处理完毕 然后退栈对一个个子区进行相类似的处 理 直到栈空 5 简单排序 思路 在 n 个记录中 用两重循环 外层循环 i 从第一个元素 a 0 开始至最后一 个 元素 a n l 内层循环 j 从外层循环所值元素 a i 的下 个元素 a jl a i l 开始 至最后一个元素 a n l 搜索 只要找到比 a i 小的元素 便与 a i 交换 如此重复执 行操作 当外层循环完毕后 全部记录就排序完成了 3 2 整体设计方案 此课题是研究的是排序问题 为了直观和方便 画出流程图如下图 1 图 1 程序总流程图 开始 调用欢迎界面 函数 startface 选择操作项 产 生 随 机 数 直 接 插 入 排 序 函 数 希 尔 排 序 函 数 冒 泡 排 序 函 数 快 速 排 序 函 数 简 单 选 择 排 序 退 出 该 系 统 保存排序后文件 结束 西华大学理学院课程设计说明书 6 通过流程图可以从中看出操作过程以及函数间的调用关系 3 3 各种操作函数 根据模块的划分 将函数对模块进行实现 主要函数如下 1 创建一个数组函数 int creat 2 输出数组函数 void print struct element a int n 3 保存函数 void save struct element a int n char filename 4 直接插入排序函数 void insertsort struct element a int n 5 希尔排序函数 void shellsort struct element a int n 6 冒泡排序函数 void bublesort struct element a int n 7 快速排序分区处理 int partition struct element a int low int high 8 快速排序函数 void quicksort struct element a int low int high 9 简单排序函数 void selesort struct element a int n 3 4 主函数 通过该函数对其他函数的调用 实现系统功能 int tmain int argc TCHAR argv int num c bool flag 0 clock t start end char file1 300 直接插入排序 txt char file2 300 希尔排序 txt char file3 300 冒泡排序 txt char file4 300 快速排序 txt char file5 300 选择排序 txt while 1 menu printf 请输入操作选项 排序综合 7 scanf d if c 1 else switch c case 1 num creat print list num printf n flag 1 break case 2 start clock insertsort list num end clock printf 直接插入排序后的结果 n print list num save list num file1 printf The Time d ms n end start printf n break case 3 start clock shellsort list num end clock printf 希尔排序后的结果 n print list num save list num file2 printf The Time d ms n end start printf n break 西华大学理学院课程设计说明书 8 case 4 start clock bublesort list num end clock printf 冒泡排序后的结果 n print list num save list num file3 printf The Time d ms n end start printf n break case 5 start clock quicksort list 0 num 1 end clock printf 快速排序完成 n printf 快速排序后的结果 n print list num save list num file4 printf The Time d ms n end start printf n break case 6 start clock selesort list num end clock printf 选择排序后的结果 n print list num save list num file5 printf The Time d ms n end start printf n break case 0 exit 1 default printf 输入错误 请重新输入 n 排序综合 9 system pause return 0 3 5 编码 数据类型定义 define size 1000000 struct element int key list size 直接插入排序模块 void insertsort struct element a int n int i j struct element x for i 1 i n i if a i key a i 1 key x a i a i a i 1 for j i 1 x key0 for i dk i n i if a i key0j dk a j dk a j a j dk x dk dk 2 printf 希尔排序完成 n 冒泡排序模块 void bublesort struct element a int n int i j struct element temp for i 0 i i j 排序综合 11 if a j 1 key a j key temp a j 1 a j 1 a j a j temp printf 冒泡排序完成 n 快速排序模块 int partition struct element a int low int high int i j struct element x i low j high x a i while i j while i x key j if i j a i a j i while i j if i j 西华大学理学院课程设计说明书 12 a j a i j a i x return i void quicksort struct element a int low int high int i if low high i partition a low high quicksort a low i 1 quicksort a i 1 high 简单排序模块 void selesort struct element a int n int i j z struct element temp for i 0 i n i z i for j 1 i ja j key 排序综合 13 z j if z i temp a i a i a z a z temp printf 选择排序完成 n 4 测试系统 对于所有执行过程 通过图片最好说明问题了 程序开始如图 2 所示 图 2 开始界面图 4 1 设计测试数据 用随机函数产生的 20 个随机数作为测试实例 西华大学理学院课程设计说明书 14 图 3 产生随机数 4 2 测试结果与分析 图 4 直接插入排序结果图 图 5 希尔排序结果图 排序综合 15 图 6 冒泡排序结果图 图 7 快速排序结果图 图 8 简单排序结果图 西华大学理学院课程设计说明书 16 结 论 通过这次课程设计的学习让我学会了许多 让我对我们的专业知识有了很大理解 在这次课程设计中 独立完成了在数组存储结构下的每种排序算法 排序算法共 有五个 插入排序 希尔排序 冒泡排序 快速排序 选择排序 同时也实现了随机 数的生成 并把排序后的结果保存在不同的文件中 虽然在算法完成的过程中也在网 上査阅了一些资料 但对这次课程设计的成果还是比较满意的 同时在完成这个课程设计后 我也学到了很多知识 并能熟练的掌握他们了 熟 练的撑握 C 语言的文件读写操作 掌握了每种排序算法的基本思想 并学会了编写程 序的一般步骤 思考问题 写出解决方案 写出伪代码 完成代码 调试程序 不像 以前那样开始就直接写代码 排序综合 17 致 谢 这次课程设计能够顺利完成 当然要感谢老师和同学的帮助 没有老师的悉心指 导和督促 就不可能这么顺利和按时完成任务 真的非常感谢 老师教导我们 首先 要对程序的设计要求有一个比较明确的认识 然后系统分析与系统设计 最后是代码 设计与调试 程序实现上 设计了简单的菜单界面 将各个功能集中出现在主菜单中 便于调用 在整个过程中周围的同学也给了不少帮助 而且帮忙解决了很多想不通的 问题 在此真的非常感激每个人 希望在今后学习中大家一起互相学习 共同进步 编写程序的过程是辛苦与快乐的 程序的编写原则很重要 只要我们在编程 就必须 不断改进 才能更好提高编程能力 西华大学理学院课程设计说明书 18 参考文献 1 严蔚敏等编著 数据结构 C语言版 北京 淸华大学出版社 2003 2 严蔚敏等编著 数据结构题集 C语言版 北京 清华大学出版社 2003 3 李春葆等编著 数据结构教程 C语言版 北京 淸华大学出版社 2006 4 朱立华等编著 C语言程序设计 北京 人民邮电出版社 2009 排序综合 19 附录 include stdafx h include include include define size 1000000 调用库函数 struct element int key list size 结构体模板 int creat int i int num printf 请输入元素的个数 scanf d if num 999999 printf 输入超界 n return 0 for i 0 i num i list i key rand 10000 return num 西华大学理学院课程设计说明书 20 创建一个数组 void print struct element a int n int i for i 0 i n i printf 5d a i key printf n 输出数组 void save struct element a int n char filename int wj 0 FILE fp if fp fopen filename w NULL printf file writer error n for int m 0 m n m wj a m key fprintf fp d d wj fclose fp 保存到文件 void insertsort struct element a int n int i j 排序综合 21 struct element x for i 1 i n i if a i key a i 1 key x a i a i a i 1 for j i 1 x key0 for i dk i n i if a i key0j dk a j dk a j a j dk x dk dk 2 西华大学理学院课程设计说明书 22 printf 希尔排序完成 n 希尔排序 void bublesort struct element a int n int i j struct element temp for i 0 i i j if a j 1 key a j key temp a j 1 a j 1 a j a j temp printf 冒泡排序完成 n 冒泡排序 int partition struct element a int low int high int i j struct element x i low j high x a i 排序综合 23 while i j while i x key j if i j a i a j i while i j if i j a j a i j a i x return i void quicksort struct element a int low int high int i if low high i partition a low high quicksort a low i 1 quicksort a i 1 high 西华大学理学院课程设计说明书 24 快速排序 void selesort struct element a int n int i j z struct element temp for i 0 i n i z i for j 1 i ja j key z j if z i temp a i a i a z a z temp printf 选择排序完成 n 简单选择排序 void menu printf n t t 主菜单 n printf t t 1 生成随机排序元素 n 排序综合 25 printf t t 2 直接插入排序 n printf t t 3 希尔排序 n printf t t 4 冒泡排序 n printf t t 5 快速排序 n printf t t 6 简单选择排序 n printf t t 0 退出 n printf t t n printf n n 该系统的菜单 int tmain int argc TCHAR argv int num c bool flag 0 clock t start end char file1 300 直接插入排序 txt char file
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国邮政2025浙江省秋招电子商务与数字营销类岗位高频笔试题库含答案
- 2025年公路造价师理论与方法合同的分类模拟试题(附答案)
- 麻栗坡县中烟工业2025秋招新型烟草研发岗位面试模拟题及答案
- 鸡西市烟草公司2025秋招仓储管理岗位面试模拟题及答案
- 2025江苏南京市建邺区政府购岗人员招聘1人考试参考题库及答案解析
- 2025云南楚雄云植药业有限公司见习生招募10人考试参考题库及答案解析
- 2025中智信通科技服务(广东)有限公司运营支持岗位招聘20人考试参考题库及答案解析
- 2025年河北承德双桥区西大街街道办事处高校毕业生临时公益性岗位招聘考试参考题库及答案解析
- 护理毕业考试刷题题库及答案
- 2025年湖南省法院系统招聘74名聘用制书记员考试参考题库及答案解析
- 机械厂设备使用维护细则
- 康复辅助技术咨询师理论知识考核试卷及答案
- LNG安全教育培训课件
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测英语试题(含答案)
- 人保新人考试题及答案
- 软件项目质量、进度、安全保障措施
- 老年专科考试题及答案
- 护理学基础:晨晚间护理
- 实验室室内质控年度总结
- 2025年社保自缴协议书
- 2025-2026学年人教精通版四年级英语上册(全册)教学设计(附目录)
评论
0/150
提交评论