实验2分治法实现归并排序Word文件下载.docx
- 文档编号:17103306
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:8
- 大小:95.66KB
实验2分治法实现归并排序Word文件下载.docx
《实验2分治法实现归并排序Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验2分治法实现归并排序Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
通过上机实验,要求掌握分治法解决问题,以及二路归并算法的实现。
实验原理
使用分治法和二路归并算法,根据不同的随机数规模和数量,能准确的输出通过二路归并排序后的数组,并计算出程序运行所需要的时间。
实验步骤
①先输入随机数组的长度和规模;
②产生一个随机数组;
③计时开始,调用排序函数;
④输出排序后的数组,输出算法话费的时间。
关键代码
template<
classT>
//将b[0]至b[right-left+1]拷贝到a[left]至a[right]
voidCopy(Ta[],Tb[],intleft,intright)
{
intsize=right-left+1;
for(inti=0;
i<
size;
i++)
{
a[left++]=b[i];
}
}
//合并有序数组a[left:
i],a[i+1:
right]到b,得到新的有序数组b
voidMerge(Ta[],Tb[],intleft,inti,intright)
inta1cout=left,//指向第一个数组开头
a1end=i,//指向第一个数组结尾
a2cout=i+1,//指向第二个数组开头
a2end=right,//指向第二个数组结尾
bcout=0;
//指向b中的元素
for(intj=0;
j<
right-left+1;
j++)//执行right-left+1次循环
if(a1cout>
a1end)
b[bcout++]=a[a2cout++];
continue;
//如果第一个数组结束,拷贝第二个数组的元素到b
if(a2cout>
a2end)
b[bcout++]=a[a1cout++];
}
//如果第二个数组结束,拷贝第一个数组的元素到b
if(a[a1cout]<
a[a2cout])
//如果两个数组都没结束,比较元素大小,把较小的放入b
else
//对数组a[left:
right]进行合并排序
voidMergeSort(Ta[],intleft,intright)
T*b=new
int[right-left+1];
if(left<
right)
inti=(left+right)/2;
//取中点
MergeSort(a,left,i);
//左半边进行合并排序
MergeSort(a,i+1,right);
//右半边进行合并排序
Merge(a,b,left,i,right);
//左右合并到b中
Copy(a,b,left,right);
//从b拷贝回来
测试结果
实验心得
通过这次实验,我更加理解了分治法的策略和递归的调用。
明白了二路归并排序的实质办法。
可以比较在同样数据规模的情况下,不加入随机化过程和加入随机化过程的运行时间。
特别是在数据基本有序的情况下,加入随机化过程应该能大大提高速度。
计算算法运行的时间和程序运行的时间是不一样的,刚开始我把计算算法运行时间的函数start()的位置弄错了,自己不知道还是助教学长的提醒,才知道自己的错误,导致后面运行的时候得出来的时间有7,8秒了,是把我的输入的时间也算进去了,没有得到准确的算法运行时间。
改变计算时间函数的位置后,算法运行的时间才正确了。
实验得分
助教签名
附录:
完整代码
#include<
time.h>
iostream>
iomanip>
stdlib.h>
usingnamespacestd;
intmain()
while
(1)
{
intn;
intf;
cout<
<
"
请输入您将要排序的数目:
;
cin>
>
n;
请输入随机数的规模:
f;
int*a=newint[n];
产生的随机数:
//取随机数
srand((unsigned)time(NULL));
a[i]=(rand()%(f)+0);
a[i]<
'
'
//计时开始
clock_tstart,end,over;
start=clock();
end=clock();
over=end-start;
MergeSort(a,0,n-1);
endl;
排序结果:
j++)
/*setw(4)*/'
a[j];
printf("
Thetimeis%6.3f"
(double)(end-start-over)/CLK_TCK);
system("
pause"
);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 分治 实现 归并 排序
![提示](https://static.bdocx.com/images/bang_tan.gif)