预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实训报告 实训题目:各种排序算法时间性能的比较 学院:计算机科学与技术学院 专业:软件工程 班级:142 学号:1400170269 学生姓名:莫磊 指导教师:蔡丽 2016年3月15日 一、实训目的及要求 数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。本综合实训利用VisualStudio2008集成编程环境为实践工具,通过上机实践培养学生分析具体问题、解决实际问题的能力,训练和培养学生的数据抽象能力和程序设计的能力。 数据结构是一门实践性较强的课程,以培养学生的数据抽象能力和程序设计的能力为目的。在实训时应注重培养学生的实际操作能力。本综合实训安排了18学时的实验课时,具体要求如下: 1.学习和理解每个实训题目的基本理论和方法; 2.掌握每个实验的实现步骤和关键技术; 3.准备好实验所需要的资源和文档; 4.上机实现程序,得到通过调试的正确程序。 5.根据每个实验的不同要求,完成实验报告的word文档。 实训环境 WindowsXP VisualStudio2013 三、实训内容 (1)设计并实现上述各种排序算法; (2)产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能; (3)产生随机的初始排列分别调用上述排序算法,并比较时间性能。 (4)对各种排序方法(直接插入排序、希尔排序、起泡排序、直接选择排序)的时间性能进行比较。 四、算法描述及实训步骤 上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。 五、总结及心得体会 直接选择排序算法是对冒泡排序的改进,这种方法是在参加排序数组中找出最小(或最大)的数据元素,使它与第一个元素中的数据相互交换位置然后再在余下的元素中找出最小(或最大)的数据元素与第二个元素中的元素交换位置,以此类推直到所有元素成为有序序列。 六、实训结果 七、源代码: #include<stdio.h> #include<stdlib.h> #include<time.h> //正序希尔排序 voidxiEr(intnum[],intn,int&no,int&r){ intitem; inti,j,d; for(d=n/2;d>=1;d=d/2){ for(i=d;i<n;i++){ item=num[i]; j=i-d; while((j>=0)&&(item<num[j])){ num[j+d]=num[j]; j=j-d; r=r+1; } num[j+d]=item; no=no+1; } } // printf("\n"); // for(intx=0;x<n;x++){ // printf("%d\t",num[x]); // } } //逆序希尔排序 voidxiErUp(intnum[],intn,int&no,int&r){ intitem; inti,j,d; for(d=n/2;d>=1;d=d/2){ for(i=d;i<n;i++){ item=num[i]; j=i-d; while((j>=0)&&(item>num[j])){ num[j+d]=num[j]; j=j-d; r=r+1; } num[j+d]=item; no=no+1; } } } //正序冒泡排序 voidMaoPao(intnum[],intn,int&no,int&r){ boolflag; inttest; for(inti=1;i<n;i++){ flag=true; for(intj=n-1;j>=i;j--){ if(num[j]<num[j-1]){ test=num[j]; num[j]=num[j-1]; num[j-1]=test; flag=false; r++; } no++; } if(flag){ return; } } } voidMaoPaoUp(intnum[],intn,int&no,int&r){ boolflag; inttest; for(inti=1;i<n;i++){ fla