中南大学数据结构实验报告(七)(共20页).docx
《中南大学数据结构实验报告(七)(共20页).docx》由会员分享,可在线阅读,更多相关《中南大学数据结构实验报告(七)(共20页).docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上中南大学数据结构试验报告题 目 实验七 学生姓名 王云鹏 学 号 指导老师 郑 瑾 学 院 计算机学院 专业班级 物联网1802 完成时间 2020.6 指导老师评定 签名 实验七1. 需求分析本实验目的是使读者,掌握常用排序方法的基本思想,通过实验加深理解各种排序算法,通过实 验掌握各种排序方法的时间复杂度分析,了解各种排序方法的优缺点及适用范围。 1排序算法的实现(设计性实验) 问题描述 排序是计算机领域的一项重要技术,是程序设计中的一种重要运算。它的功能是将一个数据元素 的任意序列重新排列成一个按键有序的序列。学习和研究各种排序方法是计算机工作者的一项重要工 作
2、课题。 基本要求 随机产生n个整数(依次为n赋值100、200、300、1 000和2 000),将其存于数组A1.n中。对主 要算法(顺序查找、插入排序、归并排序、堆排序和快速排序)进行实验比较,计算出平均比较次数 cn、平均移动次数mn及执行时间tn。cn和mn由程序自动计算,tn由系统时间计算。 对实验结果数据进行对比分析。 测试数据 由随机数生成器决定。实现提示 (1) 设计一个驱动程序,其任务是,随机输入一组原始数据A1.n,对于查找还需准备一个键码 值(可以随机产生,也可在A1.n中按索引号挑选若干有代表性的数据)。对每组原始数据,分别调用 查找或排序算法过程。 (2) 为了自动计
3、算cn和mn需要在每个算法过程中的适当位置插入计数操作。 手工计算每个算法的执行时间tn时,为了减少计时误差,删除所插入的计数操作,并按n的大小确 定一个K,对每个查找或排序算法过程反复调用K次,在调用开始前设置一个计时起点t0,在K次调用 执行后可打印信息。设计时的终点为t1,则(t1t0)/K便是算法的大致执行时间。 选作内容 对不同的输入表长做试验,观察含义相同的变量相对于表长的变化关系,还可以对稳定性做验证。 2统计成绩(综合性实验) 问题描述 给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名及各科成绩组成。对学生的考试 成绩进行有关统计,并打印统计表。 基本要求 (1) 按
4、总数高低次序,打印出名次表,分数相同的为同一名次。 (2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。 测试数据 由读者依据软件工程的测试技术自己确定。注意测试边界数据。 选作内容 对各科成绩设置不同的权值2. 概要设计n 设计性实验函数:n 综合性实验函数:3. 详细设计n 设计性实验#include#include#includeusingnamespacestd;templatevoidprint_array(tarray,intarray_size)/模板,打印数组for(inti=0;iarray_size;i+)coutarrayi;if(i+1)%50=0)couten
5、dl;coutendl;templatevoidmy_swap(t&a,t&b)/模板,交换数据a、bttemp=a;a=b;b=temp;classancestorpublic:longcn=0;/平均比较次数longmn=0;/平均移动次数longtn=0;/平均执行时间,单位:CPU时钟数intarray_size;int*array;ancestor(intn)/初始化array,存放待用数字序列array_size=n;/array=newintarray_size;array=(int*)malloc(array_size*sizeof(int);/位array分配空间/intxa
6、rray_size;/array=x;srand(unsigned)time(NULL);/随机数种子for(inti=0;iarray_size;i+)arrayi=rand()%array_size;/用随机数序列初始化array;classseq_search:publicancestor/顺序查找public:seq_search(intn,intdest):ancestor(n)clock_tstart_time,end_time;start_time=clock();/计时程序intflag=0;/是否查找到的标志位for(inti=0;in;i+)/遍历查找cn+;if(arra
7、yi=dest)/找到flag=1;/coutdest位于序列的第i+1位endl;end_time=clock();/停止计时/tn=(double)(end_time-start_time)/CLOCKS_PER_SEC;tn=end_time-start_time;if(flag=0)/没找到/cout数字序列中没有destendl;classinsert_sort:publicancestor/插入排序public:insert_sort(intn):ancestor(n)clock_tstart_time,end_time;start_time=clock();/计时for(inti
8、=1;in;i+)/遍历所有数据,看能否往前插入cn+;if(arrayiarrayi-1)/若前一个比当前的大,就接着往前寻找,否则说明当前数据有序,不需要移动inttemp=arrayi;intj;for(j=i-1;temp=0;j-)/移动比当前所有数据大的数,向后移动一位,覆盖arrayj+1=arrayj;cn+;/计数mn+;/coutjendl;arrayj+1=temp;/最后,插入当前数据到比他略小的数据之后end_time=clock();tn=end_time-start_time;classmerge_sort:publicancestor/归并排序public:me
9、rge_sort(intn):ancestor(n)clock_tstart_time,end_time;start_time=clock();/计时my_sort(array,array_size,0,array_size-1);/排序end_time=clock();tn=end_time-start_time;voidmy_sort(intarray,intarray_size,intleft,intright)/array为待排序数组,left为拆开的下界,right为上界if(leftright)intmid=(int)(left+right)/2);my_sort(array,ar
10、ray_size,left,mid);/拆开上半部分my_sort(array,array_size,mid+1,right);/拆开下半部分merge(array,array_size,left,mid,right);/归并拆开的部分voidmerge(intarray,intarray_size,intleft,intmid,intright)/归并inti,j,k;inttempright-left+1;/存放需要参加比较的数据for(inti=left;i=right;i+)/从array赋值,初始化temptempi-left=arrayi;for(i=left,j=mid+1,k=
11、left;i=mid&j=right;k+)/两条数据合并,挨个比较并在一起if(tempi-left=tempj-left)/i小,将i所在数据存入arrayarrayk=tempi-left;i+;else/j小,将j所在数据存入arrayarrayk=tempj-left;j+;cn+;mn+;while(i=mid)/某条数据放完,将剩下的数据直接放入arrayarrayk+=tempi-left;i+;mn+;while(j=0;i-)heap_adjust(i,array_size-1);/建立一个大顶堆swap(array0,arrayarray_size-1);/将堆顶与堆底互
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 数据结构 实验 报告 20
限制150内