数据结构课程设计

上传人:re****.1 文档编号:563775081 上传时间:2023-12-28 格式:DOC 页数:33 大小:137.50KB
返回 下载 相关 举报
数据结构课程设计_第1页
第1页 / 共33页
数据结构课程设计_第2页
第2页 / 共33页
数据结构课程设计_第3页
第3页 / 共33页
数据结构课程设计_第4页
第4页 / 共33页
数据结构课程设计_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《数据结构课程设计》由会员分享,可在线阅读,更多相关《数据结构课程设计(33页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计 说 明 书课程名称: 数据结构和算法 设计题目: 多种排序 院 系: 计算机科学与信息工程学院 学生姓名: 学 号: 专业班级: 计科嵌入式(12-1) 指导教师: 年 月 日课 程 设 计 任 务 书设计题目表达式计算程序设计学生姓名所在院系计科专业、年级、班12计科(嵌入式)设计要求:1) 采用如下七种方法实现上述问题求解:插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序。2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。并将数据序列和不同的查找算法的性能结果记录入txt文件。学生应完成的工作:1. 利用随机

2、函数产生N个随机整数(10000以上)。2. 对这些数字进行排序。3. 采用插入、希尔、起泡、快速、选择、归并、堆排序方法解决问题。4. 对不同的排序算法进行性能比较并记录。参考文献阅读: 1. 数据结构(C语言版) 严蔚敏 清华大学出版社 2. C语言程序设计 丁峻岭 中国铁道出版社 3. C程序设计 谭浩强 清华大学出版社工作计划:任务下达日期: 年 月 日 任务完成日期: 年 月 日指导教师(签名): 学生(签名): 多种排序摘 要: 排序是算法中最基础的问题之一,经典的排序算法是前人不断总结得到的,基于比较的方法是比较直观的方式,主要存在插入法排序、堆排序、希尔排序、归并排序、快速排序

3、,每一种排序算法都有自己的优缺点,比如插入法排序适用于那些长度短的排序,要是长的话,有些爱莫能助啦,堆排序主要是依据了二叉堆的特性,但是创建堆的过程也是一个复杂的问题,希尔排序的过程是一个不断精确的过程,但是目前也只是一个经验方式。归并排序是一个递归的问题,采用分治的思想实现,但是这种算法需要额外的存储空间,快速排序虽然是实践中比较常用的算法,但是对于有序的数组采用快速排序就是灾难。比较型算法的时间复杂度最优也只能到达O(NlogN)。关键词:归并排序快排排序选择排序冒泡排序插入排序堆排序希尔排序内部排序目 录1. 设计背景41.1问题描述41.2 问题分析42.设计方案42.1 算法设计4

4、2.2 功能模块分析63.主要算法流程图154. 结果与结论164.1正确结果164.2错误信息185. 算法复杂度以及稳定性分析186. 收获与致谢197. 参考文献198. 附件201. 设计背景1.1问题描述 利用随机函数产生N个随机整数(10000以上),对这些数进行多种方法进行排序。包括:插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序。1.2 问题分析经典的排序算法是前人不断总结得到的,基于比较的方法是比较直观的方式,主要存在插入法排序、堆排序、希尔排序、归并排序、快速排序,每一种排序算法都有自己的优缺点。2. 设计方案2.1 算法设计(1) 选择排序 在待排序的

5、一组数据元素中,选出最小的一个数据元素与第一个位置的数据元素交换;然后在剩下的数据元素当中再找最小的与第二个位置的数据元素交换,循环到只剩下最后一个数据元素为止。 (2) 冒泡排序 相邻的两个元素进行比较,将小的调到前面,大的调到后面。 (3) 插入排序 待排序的记录放在数组R0n-1中排序过程中某一时刻,R被划分成两个子区间R0,i-1 (有序和)Rin-1(无序)。直接插入的基本操作是将当前无序区的一个记录Ri插入到有序区R0i-1中适当的位置 (4) 快速排序 在待排序的数组的n个元素中取一个元素(一般取第一个),将其移动到这样的位置:在其之前的元素的值都小于它,在其之后的元素都大于它,

6、这样是一趟快速排序;然后对数组的两个部分进行同样的操作,直到每部分只有一个记录为止;总之,每趟使表的第一个元素放在适当位置,将表两分,再对两子表进行同样的递归划分,直至划分的子表长度为1。(5)堆排序堆排序中 heap 算法的时间复杂度与堆所对应的完全二叉树的树高度 log2n 相关。而 heapsort 中对 heap 的调用数量级为n,所以堆排序的整个时间复杂度为O(nlog2n) 。并且堆排序是不稳定的。堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(6)归并排序 将两个或两个以上的有序表组成一个新的有序表

7、。 (7) 希尔排序将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序.最后选择增量为1,即使用直接插入排序,使最终数组成为有序。增量的选择:在每趟的排序过程都有一个增量,至少满足一个规则 增量关系 d1 d2 d3 . dt = 1 (t趟排序);根据增量序列的选取其时间复杂度也会有变化,这个不少论文进行了研究,在此处就不再深究;本文采用首选增量为n/2,以此递推,每次增量为原先的1/2,直到增量为1。2.2 功能模块分析1. 数据输入:采取随机函数实现输入数据表。int inp

8、ut_num()printf(您要给多少个数排序?ntt);scanf(%d,&data_num);srand(NULL);printf(随机产生%d个数:ntt,data_num);for(int i=1;i=1;i-)printf(%d%s,data_arrayi,i!=1? :n);其中增加了输出空格与换行区别。3. 主界面实现:printf(DATE:May twenty 2014n); printf(All Copyright Reserved 2014-2015 Wang Guangchun n); printf(ADDRESS: 604 AYITrnnn); printf( n)

9、; printf(各种排序比较 n); printf(默认从大到小输出,可以选择9进行切换n); printf( n); printf( * * n); printf( * * * n); printf( * * n); printf( * 520 * n); printf( * 欢迎 * n); printf( * 使用 * n); printf( * * n); printf( * n); printf(欢迎再次使用!nrn); printf(*n); printf(* . . . . . *n); printf(* . . . . . . *n); printf(* . . . . .

10、. *n); printf(* . . . . . . *n); printf(* . . . . *n); printf(*n);4. 人机交互界面:printf(n n);printf(请输入指令 n);printf(* n);printf($ 1.快速排序 $ n);printf($ 2.归并排序 $ n);printf($ 3.堆排序 $ n);printf($ 4.希尔排序 $ n);printf($ 5.插入排序 $ n);printf($ 6.选择排序 $ n);printf($ 7.冒泡排序 $ n);printf($ 8.重新随机输入 $ n);printf($ 9.选择排序方式 $ n);printf(* n);printf( 0.退出 n);printf( n);printf(请选择:n); printf(请输入指令 n); printf(*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 文学/艺术/历史 > 诗歌散文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号