排序实验报告.docx

上传人:王** 文档编号:841470 上传时间:2024-01-23 格式:DOCX 页数:28 大小:176.46KB
下载 相关 举报
排序实验报告.docx_第1页
第1页 / 共28页
排序实验报告.docx_第2页
第2页 / 共28页
排序实验报告.docx_第3页
第3页 / 共28页
排序实验报告.docx_第4页
第4页 / 共28页
排序实验报告.docx_第5页
第5页 / 共28页
排序实验报告.docx_第6页
第6页 / 共28页
排序实验报告.docx_第7页
第7页 / 共28页
排序实验报告.docx_第8页
第8页 / 共28页
排序实验报告.docx_第9页
第9页 / 共28页
排序实验报告.docx_第10页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《排序实验报告.docx》由会员分享,可在线阅读,更多相关《排序实验报告.docx(28页珍藏版)》请在优知文库上搜索。

1、数据结构课程设计报告专业计算机科学与技术班级姓名学号指导教师起止时间2012.122013.1课程设计:排序综合一、任务描述排序综合任务:利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。要求:(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。二、问题分析1、功能分析分析设计课题的要求,要求编程实现以下功能:(1)排序表的建立一即创建顺序表;(2)顺序表的

2、排序一即直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序操作;(3)统计每一种排序方法的性能一即测试上机运行程序所花费的时间;2、数据对象分析数据信息:随机整数数据数量可以预先确定(20000以上)三、数据结构设计使用顺序表实现,有关定义如下:typedefintStatus;typedefintKeyType;设排序码为整型量typedefintInfoType;typedefStrUet定义被排序记录结构类型KeyTypekey;排序码InfoTypeOtherinfo;其它数据项RedType;typedefstructRedType*r;存储带排序记录的顺序表r作哨兵或缓冲区i

3、ntIength;顺序表的长度SqList;定义顺序表类型四、功能设计(一)主控菜单设计为实现通各种排序的功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。程序运行后,给出6个菜单项的内容和输入提示,如下:1 .直接插入排序2 .希尔排序3 .起泡排序4 .快速排序5 .简单选择排序0.退出系统(二)程序模块结构由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数): 主控菜单项选择函数menu() 创建排序表函数lnitList_Sq() 对顺序表L进行直接插入排序函数Insertsortf) 希尔排序函数SheIISortO; 起泡排序函数Bubb

4、le_sort() 快速排序函数QSort() 简单选择排序函数SeIectSortO(三)函数调用关系程序的主要结构(函数调用关系)如下图所示。Menu()InitLiSJSq(L)Main()Insertsort(L)SheIISortOBubble_sort()QSort()SeIectSortO其中main()是主函数,它进行菜单驱动,根据选择项05调用相应的函数。main。函数使用for循环实现重复选择。其循环结构如下:for(;)(longstart,end;switch(menu()(case 1:printf(*直接插入排序*n);start=clock();Insertsor

5、t(L);end=clock();printf(,%dmsn,end-start);fp=fopen(D:直接插入排序.txt”Jw“);if(fp=NULL)打开文件失败(Printf(打开文件失败!n”);函t;for(i=l;i=L.length;i+)fprintf(fp,%dzLri);fclose(fp);break;case 2:printf(*希尔排序*n);start=clock();ShellSOrt(L,an,14);end=clock();printf(,%dmsn,end-start);fp=fopen(D:希尔排序.txt7w);if(fp=NULL)打开文件失败(

6、Printf(打开文件失败!n);exit(l);for(i=l;i=Llength;i+)fprintf(fp,%d,Lri);fclose(fp);break;case 3:printf(*起泡排序*n);start=clock();Bubble_sort(L);end=clock();printf(,%dmsnend-start);fp=fopen(D:起泡排序.txtw);if(fp=NULL)打开文件失败Prirrtf(打开文件失败!n”);exit(l);for(i=l;i=L.length;i+)fprintf(fpj,%d.ri);fclose(fp);break;case 4

7、:Printfr快速排序*n);start=clock();QSort(LzOzLIength);end=clock();printf(%dmsn,end-start);fp=fopen(,D:快速排序.tt,7w);if(fp=NULL)打开文件失败(Printv打开文件失败!n);exit(l);)for(i=l;i=L.length;i+)fprintf(fpz,%dzLri);fclose(fp);break;printf(*简单选择排序*n);start=clock();SeIectSort(L);end=clock();printf(,%dmsn,end-start);fp=fop

8、en(D:简单选择排序.txt,w);if(fp=NULL)打开文件失败(Printf(打开文件失败!n);exit(l);for(i=l;i=Llength;i+)fprintf(fp,%d,Lri);fclose(fp);break;case0:printf(t退出!n);return;)(四)文件结构1、sort.h:顺序表相关的定义与函数声明2、sort.cpp:顺序表排序运算的实现3、menu.h:主菜单函数的声明4、menu.cpp:主菜单函数的实现5、mn.cpp:主函数(五)各函数的算法设计1、InitLisJSqO算法原理:数组指针r指示线性表的基址,length指示线性表的

9、当前长度,将随机生成的数赋给线性表,并生成相应文件。流程图:开始申请内存随机生成30000个数字生成文件Fp=NULL将顺序表打印到文件内终止程序关闭文件结束代码描述:StatusInitList_Sq(SqLiSt&L)构造一个线性表FILE*fp;1.r=(RedType*)malloc(LIST_INIT_SIZE*sizeof(RedType);if(!L.r)exit(OVERFLoW);存储分配失败IJength=30001;表长度为30001srand(unsigned)time(NULL);for(inti=l;i=L.length;i+)1.ri.key=rand()%300

10、01+l;fp=fopen(D:构造一个线性表.txt”Jw);if(fp=NULL)打开文件失败(Printf(打开文件失败!n)exit(l);)for(i=l;i=L.length;i+)fprintf(fpz%d,Lri);fclose(fp);returnOK;/lnitList_Sq算法的时间复杂度分析:0(n)2、InsertsortO算法原理:每步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。在已形成的有序表中顺序查找,并在适当位置插入,把原来位置上的元素向后顺移。Oi=2iLlength否是1.ri.keyLri-l.k

11、ey否1二一YLrO=Lrij=i-l1.rO.keyLr0.key否是1.j+l=Lrjj-1.rj+l=LrOi+结束代码描述:voidInsertsortISqList&L)对顺序表L进行直接插入排序for(inti=2;i=L.length;i+)if(LT(Lri.keyzLri-l.key)需将L.ri插入有序表Lr=Lri;复制为“哨兵”,暂存for(intj=i-l;LT(L.rO.keyzL.rj.key);j-)1.rj+l=LrO;位置j指示了第一个keyLri.key的元素1.rj+l=LrO;将暂存在r中的记录插入到正确位置H算法的时间复杂度分析:0(n2)3、She

12、IIlnsertO分组、组内直接插入排序;2、组数逐次减小;3、组数=1,结束。流程图:开始i=dk+lKLIength否是1.ri.keyO)&(LT(L.r(O.keyzLrj.key)否1.rj+dk=Lrjj-=dk1.rj+dk=Lr0i+结束代码描述:voidShelllnsert(SqList&L,intdk)一趟Shell排序,dk为步长inti;for(i=dk+l;i0)&(LT(L.rO.keyzL.rj.key);j-=dk)1.rj+dk=Lr11;1.rj+dk=Lr0;)4、SheIISortO流程图:开始k=0ktShelllnsert(L,dltak)k+结束

13、代码描述:voidShellSort(SqList&LJntdltaJntt)SheIl排序,dlta。为增量序列,t为增量个数intk;for(k=0;kt;k+)Shelllnsert(Lzdltak);/SheIISort算法的时间复杂度分析:O(n(log2n)2)5Bubble_sort()算法原理:每趟不断将记录两两比较,若发现逆序,则交换两个记录,使排序码较小的元素逐渐从后部移向前部(就象水底的气泡一样逐渐向上冒)。c?n=L.lengthi=linflag=Oj=n-lj=i1.rj+l.keyLrU+lj-flag=Oi+结束代码描述:voidBubble_sort(SqList&L)(RedTypex;intn;n=L.length;表长for(inti=l;i=i;j-)if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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