2022年基于选择排序方法的类模板设计与实现C课程设计.docx
《2022年基于选择排序方法的类模板设计与实现C课程设计.docx》由会员分享,可在线阅读,更多相关《2022年基于选择排序方法的类模板设计与实现C课程设计.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源同学姓名吴琼班级学号专 业通信工程课程设计题目基于挑选排序方法地类模板设计与实现评语组长签字:成果日期20年 月 日课程设计任务书学 院同学姓名课程设计题目信息科学与工程吴琼专 业班级学号通信工程基于挑选排序方法地类模板设计与实现成 绩 评 定 表欢迎下载精品学习资源实践教案要求与任务建立一维数组数据结构地模板类,使一维数组中地数据元素可以是char, int, float 等多种数据类型,并对数组元素实现挑选类排序.主要完成如下功能:(1)(2)(3)(4)(5)实现数组数据地输入和输出;实现简洁挑选排序功能; 实现树形挑选排序功能; 实现堆排序功能;将每种排序功能作为类地成员函
2、数实现,编写主函数测试上述排序功能.工作方案与进度支配第 17 周:分析题目,查阅课题相关资料,进行类设计、算法设计;第 18 周:程序地设计、调试与实现;第 19 周:程序测试与分析,撰写课程设计报告,进行答辩验收.指导老师:专业负责人:学院教案副院长:201 年 月 日201年 月 日201年 月 日摘 要运算机中储备地数据,初始时没有任何排列规律,依据实际需求,常常要排列成有规律地数据序列也就是将数据序列按关键字升序或降序规律排列.挑选排序是排序法中很经典地算法,挑选排序法可以分为简洁挑选排序、树形挑选排序和堆排序.本文采纳 C+ 语言实现了挑选排序功能,设计了模板类,实现了int 型
3、float 型和 char 型数组地欢迎下载精品学习资源排序,设计了简洁挑选排序、树形挑选排序和堆排序地三个函数体,采纳Visual C+ 6.0 地掌握台工程和MFC 工程分别实现了各类型数组地排序,通过对两种程序地测试结果说明:简洁挑选排序是挑选排序地基础,而树形挑选排序和堆排序是简洁挑选排序地改进.关键词:模板类;简洁挑选排序;树形挑选排序;堆排序;掌握台工程;MFC 工程 .欢迎下载精品学习资源目 录1 需求分析 .1.2 算法基本原理 .1.3 类设计 .3.4 基于掌握台地应用程序 .3.4.1 类地接口设计 .3.4.2 类地实现 .4.4.3 主函数设计 .9.4.4 基于掌握
4、台地应用程序测试 .1 0.5 基于 MFC 地应用程序 .1 2.5.1 基于 MFC 地应用程序设计错. 误!未定义书签;5.1.1 MFC 程序界面设计135.1.2 MFC 程序代码设计145.2 基于 MFC 地应用程序测试 .2 1结 论 .2.2.参考文献 .2.3.欢迎下载精品学习资源1 需求分析( 1)当进行数据处理时,常常遇到需要进行查找操作,通常期望待处理地数据按关键字大小有序排序 ,由于这样就可以采纳查找效率较高地查找算法.( 2)对有序地次序表可以采纳查找效率较高地折半查找算法,而对无序地次序表只能采纳次序查找算法.由此可见排序是运算机程序设计中一种基础性操作,讨论和
5、把握各种排序方法是特别重要地.( 3)排序算法对于运算机信息处理很重要,一个好地排序不仅可以使信息查找地效率提高,而且直接影响着运算机地工作效率.本试验题目为基于挑选排序方法地类模板设计与实现,要求建立一维数组数据结构地模板类,使一维数组中地数据元素可以是char, int, float 等多种数据类型,并对数组元素实现挑选类排序 .因此试验采纳类模板,可以对不同地数据类型地数据进行排序,并通过函数采纳不同地方法进行排序.2 算法基本原理( 1)简洁挑选排序从无序地记录序列中选出一个关键字值最小地记录存入到指定位置置./简洁挑选排序SelectSortType arint i,j ;Type
6、t;fori=1 ; ilen ;i+forj=i+1 ;jarrayjt=arrayi ;arrayi=arrayj;arrayj=t ;欢迎下载精品学习资源( 2)树形挑选排序树形挑选排序地基本思想:树形挑选排序又称锦标赛排序(Tournament Sort),是一种依据锦标赛地思想进行挑选排序地方法.第一对 n 个记录地关键字进行两两比较,然后在n/2 个较小者之间再进行两两比较,如此重复,直至选出最小地记录为止.( 3)堆排序堆排序由建初始堆和调整堆两个过程组成 .再次,所谓挑选是指对一棵左右子树均为堆地完全二叉树,经调整根节点后使之成为堆地过程 .建堆时肯定要从最终一个非叶子结点开头
7、.堆排序地关键是调整堆,建初始堆时也是要从最终一个非叶子结点开头向根结点方向进行调整建堆 .假设完全二叉树地第i 个结点地左子树,右子树已是堆,就对第i 个结点进行调整时,需要将r2i.key与 r2i+1.key之中地最大者与ri.key 进行比较,如ri.key较小就与之交换 .这有可能破坏下一级地堆,因此,需要连续采纳上述方法调整构造下一级地堆.如此反复,直到将以第i 个结点为根地子树构成堆为止.算法 :HeapSortType arint i ;Type t;/ 循环建立初始堆fori=len/2 ;i=1 ;i-AdjustTreearray,i,len ;/进行 n-1 次循环,完
8、成堆排序fori=len ;i=2 ;i-t=arrayi ;arrayi=array1 ;array1=t ;AdjustTreearray,1,i-1 ;欢迎下载精品学习资源3 类设计从上面地算法分析可以看到,本设计面临地问题地关键是类模板.可以定义一个模板类sort,模板类 sort 功能有输入,输出数组,用三种方法对数组进行排序.从问题地需要来看,在模板类中定义三个成员函数.成员函数 SelectSort()对数组进行简洁挑选排序,成员函数tree_select_sort()对数组进行树形挑选排序,成员函数HeapSort ()对数组进行堆排序.成员函数 AdjustTree ()通过
9、始建和调整堆帮助堆排序, 而成员函数write 和 print 输入输出数组 .主函数中应用if 判定语句确定数组数据类型, swich()语句挑选使用地排序方法.定义了两个对象分别是整型和字符型地.类用 template 限定,其中地数据类型用type 代替,全部地成员函数都用template 修饰,使之能适用于多种数据类型.4 基于掌握台地应用程序整个程序只用一个独立地文档,文件中包含一个模板类,主函数中定义多个对象来实现调用三个成员函数对数组进行简洁挑选排序,树形挑选排序,堆排序这三种排序,在此定义了三个对象分别是整型、字符型和浮点型地.4.1 类地接口设计#include #inclu
10、de #include #include #define num 50#define M 50#define MIN_V ALUE -10000 templateclass Sortpublic:/ 外部接口欢迎下载精品学习资源void AdjustTreeType ar,int n,int k;void write ;void SelectSortType ar ;void tree_select_sortType arr,int n ;void HeapSortType ar ;void print ;int len ;Type arraynum ; ;在此定义了模板类,类中全部地成员函数
11、和成员变量均定义为public 地公有类型,是类地对外接口,数据类型用type 代替 .成员函数在类中只有函数类型,函数名,参数,对函数进行内部声明,函数体在类体外定义4.2 类地实现/简洁挑选排序template void Sort:SelectSortType arint i,j ;Type t;fori=1 ;ilen ;i+ forj=i+1 ;jarrayjt=arrayi ; arrayi=arrayj ;arrayj=t ;template void Sort:tree_select_sortType arr,int n /树形挑选排序Type treeM ; / 树欢迎下载精品
12、学习资源int baseSize; / 当 n 是 2 地幂次时 ,baseSize是 n, 当 n 不是时 ,baseSize是大于 n 地最小地 2 地幂次/ 就是构造成满二叉树地最下层地大小,即叶子数int i ;Type max; / 最大值int maxIndex ; / 最大数地下标int treeSize; / 最终这棵树会达到地大小baseSize = 1;while baseSize nbaseSize *= 2;treeSize = baseSize * 2 - 1;/满二叉树地全部结点个数等于叶子数地2 倍减一for i = 0 ;i n ;i+/ 从数组地后面部分开头填
13、充, 不使用 tree0treetreeSize - i = arri ;for ;i 1 ;i -= 2/ 以 arri 和 arri + 1 为子结点地数地根是arri 和 arri + 1 中地较大者treei / 2 = treei treei - 1 . treei : treei - 1;欢迎下载精品学习资源n = n - 1; / 此时地 n 表示当前 tree1 应当放到 arr 中位置置/ 不断把树中值为最大值地结点移走,直到 n 地值为 -1while n .= -1max = tree1 ;arrn- = max ;maxIndex = treeSize ;/ 在叶子上找
14、到最大值对应地下标while treemaxIndex .= maxmaxIndex- ;treemaxIndex = MIN_VALUE ;/ 沿着叶子上地结点到根地路径更新while maxIndex 1 /当结点仍有父结点时if maxIndex % 2 = 0 /假如值为最大值地结点是左子结点/ 用子结点中较大值代替父结点treemaxIndex/2=treemaxIndextreemaxIndex+1.treemaxIndex: treemaxIndex + 1 ;else / 假如不是左子结点/ 用子结点中较大值代替父结点treemaxIndex/2=treemaxIndextre
15、emaxIndex-1.treemaxIndex: treemaxIndex - 1 ;maxIndex /= 2 ; / 连续处理父结点欢迎下载精品学习资源template void Sort:AdjustTreeType ar,int k,int n /调整堆int i,j ;i=k ;j=2*i ; /arrauj 是 arrayi 地左孩子Type temp=arrayi ;whilej=nifjn&arrayjarrayj+1 /如有孩子较大,把j 指向右孩子j=j+1 ;iftemparrayjarrayi=arrayj ; /arrayj 调整到双亲结点i=j ;j=2*i ;e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 基于 选择 排序 方法 模板 设计 实现 课程设计
限制150内