ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:612KB ,
资源ID:3279103      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3279103.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告四.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告四.docx

1、数据结构实验报告四实 验 报 告(2014 / 2015 学年 第 二 学期)课程名称数据结构A实验名称基本内排序算法的验证和性能比较,改进快速排序算法实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业 实 验 报 告实验名称基本内排序算法的验证和性能比较,改进快速排序算法指导教师实验类型设计实验学时2实验时间一、 实验目的和要求(1)验证内排序算法,分析算法的时间性能验证各种基本排序算法分析各算法的最好、最坏和平均情况时间复杂度,以渐近表示法表示。产生不同规模和排列状态的数据集,测量算法的实际执行时间;比较理论分析和实际运行时间,解释理由。提示:使用随机数发生器产生随机测试数据;

2、使用系统时钟测量运行时间。 要求:(1)理解和掌握各种基本排序算法;(2)学会测量和分析排序算法的时间和空间性能;(3)改进快速排序算法,理解改进的理由,验证算法改进的效果。二、实验环境(实验设备)硬件:微型计算机软件:Windows 操作系统、Microsoft Visual C+6.0三、实验原理及内容1、实 验 报 告2、源代码#include #include using namespace std;template void Swap(T &a, T &b) /交换两个数值 T temp; temp = a; a = b; b = temp;template void SelectS

3、ort(T A, int n) /简单选择排序 int small, i, j; for (i = 0; i n-1; i+) small = i; for (j = i+1; j n; j+) if (Aj Asmall) small = j; Swap(Ai, Asmall); template void InsertSort(T A, int n) /直接插入排序 for (int i = 1; i 0 & temp Aj-1) Aj = Aj-1; j-; Aj = temp; template void BubbleSort(T A, int n) /冒泡排序 int i, j, l

4、ast; i = n-1; while (i 0) last = 0; for(j = 0; j i; j+) if (Aj+1 Aj) Swap(Aj, Aj+1); last = j; i = last; template void QuickSort(T A, int n)/快速排序 QSort(A, 0, n-1);template void QSort(T A, int left, int right) int i, j; if (left right) i = left; j = right +1; do do i+; while (Ai Aleft & i Aleft & j =

5、 left); if (i j) Swap(Ai, Aj); while (i j); Swap(Aleft, Aj); QSort(A, left, j-1); QSort(A, j+1, right); template void Merge(T A, int i1, int j1, int i2, int j2)/两路合并排序 T *temp = new Tj2 - i1 + 1; int i = i1, j = i2, k = 0; while (i = j1 & j = j2) if (Ai = Aj) tempk+ = Ai+; else tempk+ = Aj+; while(i

6、 = j1) tempk+ = Ai+; while(j j2) tempk+ = Aj+; for (i = 0; i k; i+) Ai1+ = tempi; delete temp;template void MergeSort(T A, int n) int i1, j1, i2, j2; int size = 1; while (size n) i1 = 0; while (i1 + size n - 1) j2 = n-1; else j2 = i2 + size -1; Merge(A, i1, j1, i2, j2); i1 = j2 +1; size *= 2; templa

7、te void AdjustDown(T A, int r, int j)/堆排序 int child = 2*r+1; T temp = Ar; while(child = j) if(child j & Achild = Achild) break; A(child-1)/2 = Achild; child = 2 * child + 1; A(child-1)/2 = temp;template void HeapSort(T A, int n) for (int i = (n-1)/2; i-1; i-) / 调整为最大堆 AdjustDown(A, i, n-1); for(i=n-

8、1; i0; i-) Swap(A0, Ai); AdjustDown(A, 0, i-1); template void Copy(T A, T B, int n)/将A数组复制到B数组中 for (int i = 0; i n; i+) Bi = Ai;template void Print(T A, int n)/输出数组中的值 for (int i = 0; i n; i+) coutAi ;template void DataGen(T A, int n)/生成随机数 int i = 0; srand(unsigned) time(NULL); for (i = 0; i n; i+

9、) Ai = rand()*rand(); void main() int n = 60000; int *A = new intn; int *B = new intn; int i = 0; clock_t start, finish; double elaps; DataGen(A, n); cout 共输出随机数n个endlendl; cout尚未排序前:n; for (i = 0; i n; i+) coutAi ; coutendl; Copy(A, B, n); start = clock(); QuickSort(B, n); finish = clock(); elaps =

10、 (double) (finish-start)/CLOCKS_PER_SEC; cout-4.快速排序-nelaps msendl; Print(B, n); coutendl; Copy(A, B, n); start = clock(); MergeSort(B, n); finish = clock(); elaps = (double) (finish-start)/CLOCKS_PER_SEC; cout-5.两路合并排序-nelaps msendl; Print(B, n); coutendl; Copy(A, B, n); start = clock(); HeapSort(B

11、, n); finish = clock(); elaps = (double) (finish-start)/CLOCKS_PER_SEC; cout-6.堆排序-nelaps msendl; Print(B, n); coutendl; Copy(A, B, n); start = clock(); SelectSort(B, n); finish = clock(); elaps = (double) (finish-start)/CLOCKS_PER_SEC; cout-1.简单选择排序-nelaps msendl; Print(B, n); coutendl; Copy(A, B,

12、n); start = clock(); InsertSort(B, n); finish = clock(); elaps = (double) (finish-start)/CLOCKS_PER_SEC; cout-2.直接插入排序-nelaps msendl; Print(B, n); coutendl; Copy(A, B, n); start = clock(); BubbleSort(B, n); finish = clock(); elaps = (double) (finish-start)/CLOCKS_PER_SEC; cout-3.冒泡排序-nelaps msendl;

13、Print(B, n); coutendl;3、给出测试数据及运行结果、实验相关结论等。简单选择排序:4422ms直接插入排序:2375ms冒泡排序:10671ms快速排序:16ms两路合并排序:31ms 实 验 报 告实 验 报 告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)说明:这部分内容主要包括:在编程、调试或测试过程中遇到的问题及解决方法、本次实验的心得体会、进一步改进的设想等。(一)实验中遇到的主要问题及解决方法.在进行代码输入时,没有注意到大小写、符号等,导致程序无法运行。(二)实验心得通过这次数据结构的实验,我了解到了数据结构不仅仅是一门理论学科,更是一门实践性的学

14、科。在实验过程中我发现了我的许多不足之处,如算法的不完善、语法的错误、语句的不通顺等等。在调试程序时,经常出现因为粗心大意而犯的低级错误,导致程序不能运行,耗费了大量时间去寻找并修改这些错误。同时,在进行程序设计时,要注意想好思路。将每个函数的功能都要清晰的表述出来,使人能够一目了然此程序的功能。但是完成任何一个较大的程序,都需要掌握一定的编程基础,需要不断的探索和求知过程,这样对自己编程能力的提高有较大的帮助。当然,任何程序必须经过计算机的调试,看是否调试成功,发现错误,一个个,一步步去解决,这样就能从错误中进步。 通过实验加强了我的动手能力,以及提升了局部和统一考虑问题的思维方式。这次的实验不仅让我巩固了以前所学过的c+知识,而且学到了很多在书本上所没有提及的知识。通过这次实验我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的能力。 以后要多多研读数据结构这方面的书,不断提高自己的能力,能够较为轻松的完成此类实验课题。通过这次的课程设计,我深入理解了线性表数据结构,掌握了线性表的顺序和链接两种存储表示方法。掌握了顺序表的各种基本操作。学会了使用线性表解决应用问题的方法。加深了对抽象模板类、类的继承、代码重用、重载等C+语言机制的理解和使用。五、指导教师评语成 绩批阅人日 期

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1