数据结构实验三报告Word格式文档下载.docx
- 文档编号:22733476
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:8
- 大小:270.45KB
数据结构实验三报告Word格式文档下载.docx
《数据结构实验三报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验三报告Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
二、实验内容
1.随机产生N(N=10000)个0~99之间的整数,分别用你实现的慢速、快速排序算法对产生的N个整数进行排序,输出排序所需要的时间,以及排序完成后第1个、第100个、第1000个、第10000个数的值。
2.当N=100000时,重新完成排序,并计算时间。
3.比较N=10000和N=100000的排序所需要的时间,分析排序算法时间复杂度与规模N的关系,得出你的结论。
三、实验过程
1、
(1)N=10000时,冒泡排序
#include<
stdio.h>
windows.h>
#include<
iostream.h>
constintN=10000;
voidmain()
{
LARGE_INTEGERbegin,end,freq;
doubletime;
QueryPerformanceFrequency(&
freq);
QueryPerformanceCounter(&
begin);
intarray[N];
inti=0;
for(i=0;
i<
N;
i++)
array[i]=rand()%100;
/*随机产生一万个数*/
intj=0;
intt=0;
intf=0;
for(i=0;
N-1;
i++)/*外循环控制排序的总趟数*/
{
f=0;
/*本趟排序开始前,交换标志应为假*/
for(j=N-1;
j>
i;
j--)/*内循环控制一趟排序的进行*/
if(array[j]<
array[j-1])/*相邻元素进行比较,若逆序就交换*/
t=array[j];
array[j]=array[j-1];
array[j-1]=t;
f=1;
/*发生了交换,故将交换标志置为真*/
}
if(f==0)/*本趟排序未发生交换,提前终止算法*/
break;
}
/*
printf("
第%d趟排序结果:
\n"
i+1);
PrintArray(array,n);
*/
intk;
for(k=0;
k<
k++)
cout<
<
array[k]<
"
"
;
cout<
第100,第1000,第10000个数是:
endl;
array[99]<
"
array[999]<
array[9999]<
end);
time=(end.QuadPart-begin.QuadPart)/(double)freq.QuadPart;
endl<
time;
输出结果为:
(2)N=10000时,快速排序(希尔排序)
constintn=10000;
inta[n];
for(intp=0;
p<
n;
p++)
{a[p]=rand()%100;
inti,j,gap;
for(gap=n/2;
gap>
0;
gap/=2)
for(i=0;
i<
gap;
i++)
{
for(j=i+gap;
j<
n;
j+=gap)
if(a[j]<
a[j-gap])
inttemp=a[j];
intk=j-gap;
while(k>
=0&
&
a[k]>
temp)
a[k+gap]=a[k];
k-=gap;
}
a[k+gap]=temp;
for(intk=0;
a[k]<
所需时间是"
第100,1000,10000个数是:
a[99]<
a[999]<
a[9999]<
2、
(1)N=100000时,冒泡排序
输出为
(2)当N=100000时,快速排序(希尔排序)
输出为:
3、分析时间复杂度与N的关系
我们由以上的程序输出结果可知,在N=10000时,冒泡排序所需要的时间是0.48421秒,在N=10000时,希尔排序所需要的时间是0.0577653秒。
而在N=100000时,冒泡排序所需要的时间是49.8356秒,希尔排序所需要的时间是0.41885秒。
对比可知,在相同的数据规模下,希尔排序比冒泡排序速度快得多,效率更高。
而对于同种排序算法,数据规模越大,耗时越长。
四、实验总结
这次数据结构试验,极大的加深了我对于冒泡排序和希尔排序的认识和理解。
冒泡排序,就是讲相邻的两个元素进行比较,将小的调到前面,大的调到后面,重复N-1次。
希尔排序:
先取一个小于n的整数d1
作为第一个增量,把文件的全部记录分成d1个组。
所有距离为d1的倍数的记录放在同一个组中。
先在各组内进行直接插入排序;
然后,取第二个增量
d2<
d1重复上述的分组和排序,直至所取的增量dt=1(dt<
dt-l<
…<
d1),即所有记录放在同一组中进行直接插入排序为止。
另外,本次实验是数据结构上机实验的最后一个。
经过一个学期的学习,我在学习这门课的过程中,我感受到了自己亲自动手编程序、调试序的重要性,我们要熟悉C++的语法、理解数据结构算法,体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。
比较遗憾的是本次编程并不完全是自己编写的,中间有些部分是参考的老师的代码,以及网上的算法,但还是有较多的自主编写的代码。
相信以后即使没有数据结构的课程,没有上机课,我还是会继续学习数据结构。
毕竟数据结构是一门深奥的学科,我感觉自己知道的太少了,我想要知道更多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告