欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年基于选择排序方法的类模板设计与实现C课程设计.docx

    • 资源ID:12914489       资源大小:399.33KB        全文页数:26页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年基于选择排序方法的类模板设计与实现C课程设计.docx

    精品学习资源同学姓名吴琼班级学号专 业通信工程课程设计题目基于挑选排序方法地类模板设计与实现评语组长签字:成果日期20年 月 日课程设计任务书学 院同学姓名课程设计题目信息科学与工程吴琼专 业班级学号通信工程基于挑选排序方法地类模板设计与实现成 绩 评 定 表欢迎下载精品学习资源实践教案要求与任务建立一维数组数据结构地模板类,使一维数组中地数据元素可以是char, int, float 等多种数据类型,并对数组元素实现挑选类排序.主要完成如下功能:(1)(2)(3)(4)(5)实现数组数据地输入和输出;实现简洁挑选排序功能; 实现树形挑选排序功能; 实现堆排序功能;将每种排序功能作为类地成员函数实现,编写主函数测试上述排序功能.工作方案与进度支配第 17 周:分析题目,查阅课题相关资料,进行类设计、算法设计;第 18 周:程序地设计、调试与实现;第 19 周:程序测试与分析,撰写课程设计报告,进行答辩验收.指导老师:专业负责人:学院教案副院长:201 年 月 日201年 月 日201年 月 日摘 要运算机中储备地数据,初始时没有任何排列规律,依据实际需求,常常要排列成有规律地数据序列也就是将数据序列按关键字升序或降序规律排列.挑选排序是排序法中很经典地算法,挑选排序法可以分为简洁挑选排序、树形挑选排序和堆排序.本文采纳 C+ 语言实现了挑选排序功能,设计了模板类,实现了int 型 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 基于掌握台地应用程序测试 .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)对有序地次序表可以采纳查找效率较高地折半查找算法,而对无序地次序表只能采纳次序查找算法.由此可见排序是运算机程序设计中一种基础性操作,讨论和把握各种排序方法是特别重要地.( 3)排序算法对于运算机信息处理很重要,一个好地排序不仅可以使信息查找地效率提高,而且直接影响着运算机地工作效率.本试验题目为基于挑选排序方法地类模板设计与实现,要求建立一维数组数据结构地模板类,使一维数组中地数据元素可以是char, int, float 等多种数据类型,并对数组元素实现挑选类排序 .因此试验采纳类模板,可以对不同地数据类型地数据进行排序,并通过函数采纳不同地方法进行排序.2 算法基本原理( 1)简洁挑选排序从无序地记录序列中选出一个关键字值最小地记录存入到指定位置置./简洁挑选排序SelectSortType arint i,j ;Type t;fori=1 ; i<len ;i+forj=i+1 ;j<=len ;j+ifarrayi>arrayjt=arrayi ;arrayi=arrayj;arrayj=t ;欢迎下载精品学习资源( 2)树形挑选排序树形挑选排序地基本思想:树形挑选排序又称锦标赛排序(Tournament Sort),是一种依据锦标赛地思想进行挑选排序地方法.第一对 n 个记录地关键字进行两两比较,然后在n/2 个较小者之间再进行两两比较,如此重复,直至选出最小地记录为止.( 3)堆排序堆排序由建初始堆和调整堆两个过程组成 .再次,所谓挑选是指对一棵左右子树均为堆地完全二叉树,经调整根节点后使之成为堆地过程 .建堆时肯定要从最终一个非叶子结点开头.堆排序地关键是调整堆,建初始堆时也是要从最终一个非叶子结点开头向根结点方向进行调整建堆 .假设完全二叉树地第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 次循环,完成堆排序fori=len ;i>=2 ;i-t=arrayi ;arrayi=array1 ;array1=t ;AdjustTreearray,1,i-1 ;欢迎下载精品学习资源3 类设计从上面地算法分析可以看到,本设计面临地问题地关键是类模板.可以定义一个模板类sort,模板类 sort 功能有输入,输出数组,用三种方法对数组进行排序.从问题地需要来看,在模板类中定义三个成员函数.成员函数 SelectSort()对数组进行简洁挑选排序,成员函数tree_select_sort()对数组进行树形挑选排序,成员函数HeapSort ()对数组进行堆排序.成员函数 AdjustTree ()通过始建和调整堆帮助堆排序, 而成员函数write 和 print 输入输出数组 .主函数中应用if 判定语句确定数组数据类型, swich()语句挑选使用地排序方法.定义了两个对象分别是整型和字符型地.类用 template<class Type> 限定,其中地数据类型用type 代替,全部地成员函数都用template<class Type> 修饰,使之能适用于多种数据类型.4 基于掌握台地应用程序整个程序只用一个独立地文档,文件中包含一个模板类,主函数中定义多个对象来实现调用三个成员函数对数组进行简洁挑选排序,树形挑选排序,堆排序这三种排序,在此定义了三个对象分别是整型、字符型和浮点型地.4.1 类地接口设计#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream.h> #define num 50#define M 50#define MIN_V ALUE -10000 template<class Type>class 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 ; ;在此定义了模板类,类中全部地成员函数和成员变量均定义为public 地公有类型,是类地对外接口,数据类型用type 代替 .成员函数在类中只有函数类型,函数名,参数,对函数进行内部声明,函数体在类体外定义4.2 类地实现/简洁挑选排序template <class Type>void Sort<Type>:SelectSortType arint i,j ;Type t;fori=1 ;i<len ;i+ forj=i+1 ;j<=len ;j+ifarrayi>arrayjt=arrayi ; arrayi=arrayj ;arrayj=t ;template <class Type>void Sort<Type>:tree_select_sortType arr,int n /树形挑选排序Type treeM ; / 树欢迎下载精品学习资源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+/ 从数组地后面部分开头填充, 不使用 tree0treetreeSize - i = arri ;for ;i < baseSize;i+/ 用 MIN_V ALUE 填充 tree,直到一共有 baseSize个treetreeSize - i = MIN_VALUE ;/ 构造一棵树for i = treeSize ;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 ;/ 在叶子上找到最大值对应地下标while treemaxIndex .= maxmaxIndex- ;treemaxIndex = MIN_VALUE ;/ 沿着叶子上地结点到根地路径更新while maxIndex > 1 /当结点仍有父结点时if maxIndex % 2 = 0 /假如值为最大值地结点是左子结点/ 用子结点中较大值代替父结点treemaxIndex/2=treemaxIndex>treemaxIndex+1.treemaxIndex: treemaxIndex + 1 ;else / 假如不是左子结点/ 用子结点中较大值代替父结点treemaxIndex/2=treemaxIndex>treemaxIndex-1.treemaxIndex: treemaxIndex - 1 ;maxIndex /= 2 ; / 连续处理父结点欢迎下载精品学习资源template <class Type>void Sort<Type>:AdjustTreeType ar,int k,int n /调整堆int i,j ;i=k ;j=2*i ; /arrauj 是 arrayi 地左孩子Type temp=arrayi ;whilej<=nifj<n&&arrayj<arrayj+1 /如有孩子较大,把j 指向右孩子j=j+1 ;iftemp<arrayjarrayi=arrayj ; /arrayj 调整到双亲结点i=j ;j=2*i ;else break;arrayi=temp ;template <class Type>void Sort<Type>:HeapSortType ar/堆排序int i ;Type t;fori=len/2 ;i>=1 ;i- / 循环建立初始堆欢迎下载精品学习资源AdjustTreearray,i,len ;fori=len ;i>=2 ;i-/ 进行 n-1 次循环,完成堆排序t=arrayi ;arrayi=array1 ;array1=t ;AdjustTreearray,1,i-1 ;template<class Type>void Sort<Type>:write / 输入数组int i,l ;printf" 请输入数组长度 :" ;scanf"%d",&l ;len=l ;printf" 请输入数组元素 :n" ;fori=1 ;i<=l ;i+ cin>>arrayi ;template<class Type>void Sort<Type>:print /输出数组int i ;printf" 排序后地数组为 :n" ;fori=1 ;i<=len ;i+ cout<<arrayi<<" ";cout<<endl ;在类地成员函数实现过程中,系统会自动为类产生构造函数,类地构造函数自动调欢迎下载精品学习资源用,为类动态安排了内存空间,整个调用过程中完全是由系统内部完成.成员函数对成员变量进行操作,实现排序功能,通过for 循环,实现输入输出数组元素地功能 .4.3 主函数设计在程序地主函数部分,挑选了分别以int、 char 和 float 型为数据类型地对象作为实际例子来验证算法 .第一,挑选数据类型;然后,通过write 函数对成员变量数组array 进行赋值,通过swich()语句挑选排序方式,用对象调用对应地成员函数实现数组排序;最后,通过 print ()函数输出排序后地结果.void main/ 主函数int i,j=1 ;Sort<int> s ;Sort<char> p ;Sort<float> z ;cout<<" 挑选输入类型 :1.int 2.char 3.float"<<endl ;cin>>i ;ifi=1s.write ;cout<<" 请挑选排序方式 :1.简洁挑选排序 2.树形挑选排序 3.堆排序 "<<endl ;cin>>i ;switchicase 1:s.SelectSorts.array;break;case 2:s.tree_select_sorts.array,s.len+1; break;case 3:s.HeapSorts.array;break;default:break ;s.print ; else ifi=2欢迎下载精品学习资源p.write ;cout<<" 请挑选排序方式 :1. 简洁挑选排序 2.树形挑选排序 3.堆排序 <<endl" ;cin>>i ;switchicase 1:p.SelectSortp.array;break;case 2:p.tree_select_sortp.array,p.len+1;break;case 3:p.HeapSortp.array;break;default:break ;p.print ; else ifi=3z.write ;cout<<" 请挑选排序方式 :1. 简洁挑选排序 2.树形挑选排序 3.堆排序 <<endl" ;cin>>i ;switchicase 1:z.SelectSortz.array;break;case 2:z.tree_select_sortz.array,z.len+1;break;case 3:z.HeapSortz.array;break;default:break ;z.print ;4.4 基于掌握台地应用程序测试( 1) 用简洁挑选排序进行int 类型地排序欢迎下载精品学习资源图 2( 3)用堆排序进行 float 类型地排序图 1( 2) 用树形挑选排序进行char 类型地排序欢迎下载精品学习资源图 35 基于 MFC 地应用程序MFC 地图形界面程序设计可在上述类设计地基础上进行改造,MFC地图形界面程序与 DOS 界面程序地主要不同点是:MFC 图形界面程序与 DOS 界面程序地输入输出方式不同, DOS 界面程序采纳字符交互式实现数据输入输出,主要通过cin, cout 等 I/O 流实现, 而 MFC 地图形程序界面采纳标准Windows 窗口和控件实现输入输出,因此必需在MFC 类地框架下加入上面所设计地矩阵和方程组类,并通过图形界面地输入输出改造来完成.5.1.1 MFC 程序界面设计第一在 VC 中建立 MFCAppWizard ( exe)工程,名称为1203060128 ,并在向导地Step1 中挑选基本对话框,即建立基于对话框地应用程序,如下图4、图 5 所示 .欢迎下载精品学习资源图 4 建立 MFC AppWizard ( exe)工程图 5 建立基于对话框地应用程序将对话框资源中地默认对话框利用工具箱改造成如下界面,如图6 所示 .欢迎下载精品学习资源图 6 挑选排序方法地实现界面设计图 3 所示地界面中包含了2 个 Static Text 控件, 3 个 Button 控件,和 10 个 Edit Box 控件 , 控件地基本信息列表如下表1 所示.表 1 控件基本信息输入前Static TextIDC_STATIC输入后IDC_BUTTON_1简洁挑选排序BottonIDC_BUTTON_2树形挑选排序IDC_BUTTON_3堆排序IDC_EDIT_m1 IDC_EDIT_m5Edit BoxIDC_EDIT_m6 IDC_EDIT_m10输入地 5 个元素输出地 5 个元素5.1.2 MFC 程序代码设计为了能够将对话框界面上地控件能够与代码联系起来,需要为10 个 Edit Box 控件建立Member Variables,按 Ctrl+w 键进入 MFC ClassWizard 界面,挑选 Member Variables 选项卡,可显示成员变量设置界面,如图7 所示.欢迎下载精品学习资源图 7 成员变量设置界面通过该界面设置与10 个 Edit Box 控件对应地成员变量,详细如表表 2 控件基本信息2 所示 .控件 ID成员变量类型成员变量名称IDC_EDIT_m1 IDC_EDIT_m5Intm_1m_5IDC_EDIT_m6 IDC_EDITm_10Intm_6m_10下面是编写代码地重要阶段(1) ) 简洁挑选排序 int a5 ;UpdateDatatrue ;a0=m_l1 ;a1=m_l2 ;a2=m_l3 ;a3=m_l4 ;a4=m_l5 ;欢迎下载精品学习资源int i,j,k ;int temp ;int len=5 ;fori=0 ;i<=len ;i+ k=i ;forj=i+1 ;j<=len ; j+ ifak>ajk=j ;ifk.=itemp=ak ;ak=ai ;ai=temp ;m_l6=a0 ;m_l7=a1 ;m_l8=a2 ;m_l9=a3 ;m_l10=a4 ;UpdateDatafalse ;(2) ) 树形挑选排序int a5 ;UpdateDatatrue ;a0=m_l1 ;a1=m_l2 ;a2=m_l3 ;a3=m_l4 ;欢迎下载精品学习资源a4=m_l5 ;char tree50 ; /树int max ;/最大值int baseSize;int i ;int maxIndex ;/最大值地下标int treeSize ;/最终这棵树会达到地大小int len=5 ;int MIN_V ALUE=0 ;baseSize=1;whilebaseSize<lenbaseSize*=2 ;treeSize=baseSize*2-1 ;fori=0 ; i<len ;i+treetreeSize-i=ai ;for ;i<baseSize;i+treetreeSize-i=MIN_VALUE ;/ 构造一棵树fori=treeSize ;i>1 ;i-=2treei/2=treei>treei-1.treei:treei-1;len=len-1 ;whilelen.=-1max=tree1 ;欢迎下载精品学习资源alen-=max ;maxIndex=treeSize ;whiletreemaxIndex.=maxmaxIndex- ;treemaxIndex=MIN_VALUE ;whilemaxIndex>1ifmaxIndex%2=0treemaxIndex/2=treemaxIndex>treemaxIndex+1.treemaxIndex:treemaxIndex+1 ;elsetreemaxIndex/2=treemaxIndex>treemaxIndex-1.treemaxIndex:treemaxIndex-欢迎下载精品学习资源1 ;maxIndex/=2 ;欢迎下载精品学习资源m_l6=a0 ;m_l7=a1 ;m_l8=a2 ;m_l9=a3 ;m_l10=a4 ;UpdateDatafalse ;欢迎下载精品学习资源( 3)堆排序int a5 ;UpdateDatatrue ;a0=m_l1 ;a1=m_l2 ;a2=m_l3 ;a3=m_l4 ;a4=m_l5 ;int i=0,j,temp ;int p=10 ;int q=10 ;int len=5 ;j=2*p ;whilej<=q/ 堆顶元素下筛ifj<q&&aj<aj+1/确定下筛位置+j ;temp=ai ;iftemp>ajbreak ;ap=aj ;p=j ;j*=2 ;ap=temp ;temp=a1 ;a1=ai ;ai=temp ;m_l6=a0 ;m_l7=a1 ;m_l8=a2 ;m_l9=a3 ;m_l10=a4 ;UpdateDatafalse ;欢迎下载精品学习资源5.2 基于 MFC 地应用程序测试运行程序后,第一显现地界面如图8 所示.图 8 程序初始运行界面单击简洁挑选排序按钮后,可将输入前地字符进行排序,如图6 所示 .图 9 排序后地界面欢迎下载精品学习资源结 论本次课程设计,在 DOS 界面中,先用 template<class Type>class 定义 sort 模板类,类中数据类型用 type 代替,我定义了三个成员函数, SelectSort(), tree_select_sort(), HeapSort (),分别实现对成员变量 array 数组地简洁挑选排序,树形挑选排序,堆排序,又定义了两个成员函数write 和 print ,分别输入和输出成员变量,依据模板类地定义要求,成员函数都用template<class Type>修饰,使之能适用于多种数据类型,而不是局限于一种 .我将函数地声明与定义分别,在类中声明函数,在类体外定义函数,是程序清楚易读 .通过努力,程序正确运行,并得到了试验要求地结果,说明本次程序实现了其主要功能.而我通过本次试验学到了如何定义模板类,如何使用多种方法为数组排序.MFC 程序与 DOS 界面程序编写地最大不同是程序员需要将编程精力放在图形界面设计、图形界面输入输出以及界面各种排序地设计等问题上,而这些问题在DOS 界面程序中是不存在地 .本次课程设计作为编写Windows 程序地初步尝试,能够实现程序地主要功能, 可以说是取得了胜利,然而好地程序绝不仅仅是只有功能性这一个指标,编写出一个基于Windows界面地程序时,所获得地满意程度远远大于简洁地DOS 界面程序,本次编写地MFC程序虽然能实现所需功能,但从面对对象程序设计理念和图形界面设计要求来说,尚存在不足,主要包括以下几个方面.(1 )本次地 MFC 程序只能对整型数组排序,假如改为char 型、 float 型地,需从属性地对话框中重复挑选 .这样的确很不有用.作者期望挑选地类型可以自主进行转换( 2)将类地定义与实现放在同一个头文件中也违反了面对对象程序设计理念,需要将二者分开成定义文件和实现文件.欢迎下载精品学习资源参考文献1 谭浩强 . C 程序设计 . 北京 :清华高校出版社 ,19912 郑振洁 C+ 程序设计 . 北京 :人民邮电出版社 ,20053 柴欣.C/ C+ 程序设计 . 河北高校出版社 ,20024 余苏宁、王明福 .C+程序设计 . 北京 :高等训练出版社 ,20035 李云清、杨庆红、揭安全.数据结构 m . 人民邮电高校出版社 ,2004欢迎下载

    注意事项

    本文(2022年基于选择排序方法的类模板设计与实现C课程设计.docx)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开