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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(并行计算实验快速排序的并行算法.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

并行计算实验快速排序的并行算法.doc

1、3.1 实验目的与要求1、熟悉快速排序的串行算法2、熟悉快速排序的并行算法 3、实现快速排序的并行算法 3.2 实验环境及软件单台或联网的多台 PC 机,Linux 操作系统,MPI 系统。3.3 实验内容1、快速排序的基本思想2、单处理机上快速排序算法3、快速排序算法的性能4、快速排序算法并行化5、描述了使用 2m 个处理器完成对 n 个输入数据排序的并行算法。 6、在最优的情况下并行算法形成一个高度为 logn 的排序树7、完成快速排序的并行实现的流程图8、完成快速排序的并行算法的实现3.4 实验步骤3.4.1、快速排序(Quick Sort)是一种最基本的排序算法,它的基本思想是:在当前

2、无序区R1,n中取一个记录作为比较的“基准” (一般取第一个、最后一个或中间位置的元素) ,用此基准将当前的无序区 R1,n划分成左右两个无序的子区 R1,i-1和 Ri,n(1in),且左边的无序子区中记录的所有关键字均小于等于基准的关键字,右边的无序子区中记录的所有关键字均大于等于基准的关键字;当 R1,i-1和 Ri,n非空时,分别对它们重复上述的划分过程,直到所有的无序子区中的记录均排好序为止。 3.4.2、单处理机上快速排序算法输入:无序数组data1,n输出:有序数组data1,nBegincall procedure quicksort(data,1,n)Endprocedure

3、 quicksort(data,i,j)Begin(1) if (i#include #define TRUE 1/* 函数名: main* 功能:实现快速排序的主程序* 输入:argc 为命令行参数个数;* argv 为每个命令行参数组成的字符串数组。* 输出:返回 0 代表程序正常结束初 始 化MPI_nit(MPI_Com_rak(ICOM_WORLD,size_ ,Sum处 理 机 (yID=0)获 取 待 排 序 数 组 的 长 度动 态 生 成 待 排 序 序 列从 根 处 理 器 将 数 据 序 列 广 播 到 其 他 处 理 器 MPI_Bcast调 度 执 行 排 序 par

4、_QuickSort(dat,0DatSize-1,m0,yID);ID号 为 0的 处 理 器 打 印 排 序 完 的 有 序 序 列由 第 id号 处 理 器 划 分 数 据 , 并 将 后 一 部 分 数 据 发 送 到 处 理 器 id+exp2(m-1)(1.3)Pid sen datr+1,end toP(id+2m-1)MPI_Send(at+r1, t,I,d1,P(1.2) Pid: r=patrion(dat,ij)r=arton(,str,e;处 理 器 id+exp2(m-1)接 受 处 理 器 id发 送 的 消 息递 归 调 用 并 行 排 序用 2m-1个 处 理

5、 器 对 star-(r1)的 数 据 进 行 递 归 排 序用 个 处 理 器 对 (+)end的 数 据 进 行 递 归 排 序将 排 序 好 的 数 据 由 处 理 器 id+exp2(m-1)发 回 id号 处 理 器*/int GetDataSize();para_QuickSort(int *data,int start,int end,int m,int id,int MyID);QuickSort(int *data,int start,int end);int Partition(int *data,int start,int end);int exp2(int num);i

6、nt log2(int num);ErrMsg(char *msg);main(int argc,char *argv)int DataSize;int *data;/*MyID 表示进程标志符;SumID 表示组内进程数*/int MyID, SumID;int i, j;int m, r;MPI_Status status;/*启动 MPI 计算*/MPI_Init(/*MPI_COMM_WORLD 是通信子*/*确定自己的进程标志符 MyID*/MPI_Comm_rank(MPI_COMM_WORLD,/*组内进程数是 SumID*/MPI_Comm_size(MPI_COMM_WORL

7、D,/*根处理机(MyID=0)获取必要信息,并分配各处理机进行工作*/if(MyID=0)/*获取待排序数组的长度*/DataSize=GetDataSize();data=(int *)malloc(DataSize*sizeof(int);/*内存分配错误*/if(data=0) ErrMsg(“Malloc memory error!“);/*动态生成待排序序列*/srand(396);for(i=0;i0)/* 在下面添加一条语句 */para_QuickSort(data,start,r-1,m-1,id,MyID);/*用 2m-1 个处理器对(r+1)-end 的数据进行递归排

8、序*/j=MyLength;MPI_Bcast(/*(1.5) para_quicksort(data,r+1,j,m-1,id+2m-1)*/if(j0)/* 在下面添加一条语句 */para_QuickSort(tmp,0,MyLength-1,m-1,id+exp2(m-1),MyID);/*将排序好的数据由处理器 id+exp2(m-1)发回 id 号处理器,对应于算法步骤(1.6)*/*(1.6) P(id+2m-1) send datar+1,m-1 back to Pid */if(MyID=id+exp2(m-1) if(MyID=id) /* 函数名: QuickSort*

9、功能:对起止位置为 start 和 end 的数组序列,进行串行快速排序。* 输入:无序数组 data1,n* 返回:有序数组 data1,n*/QuickSort(int *data,int start,int end)int r;int i;if(start0)num-;i=i*2;return i;/* 函数名: log2* 功能:求以 2 为底的 num 的对数* 输入:int 型数据 num* 返回: 以 2 为底的 num 的对数*/int log2(int num)int i, j;i=1;j=2;while(jnum)i-;return i;/* 函数名: GetDataSiz

10、e* 功能:读入待排序序列长度*/int GetDataSize()int i;while(TRUE)printf(“Input the Data Size :“);scanf(“%d“,/*读出正确的 i,返回;否则,继续要求输入*/if(i0) 6.7. 4: 8.9. 5: srand(int)time(0);10.11. 6: 12.13. 7: for(i = 0; i j)24.25. 13: k+;26.27. 14: 28.29. 15: 30.31. 16: positioni-start = k;32.33. 17: 34.35. 18: 36.37. 19: return

11、 position;38.39. 20: 复制代码其中 my_malloc 函数的作用为动态分配大小为 size 的空间,如分配失败,则终止程序:1. 1: void *my_malloc(int malloc_size)2.3. 2: void *buffer;4.5. 3: 6.7. 4: if(buffer = (void *)malloc(size_t)malloc_size) = NULL)8.9. 5: printf(“malloc failure“);10.11. 6: exit(EXIT_FAILURE);12.13. 7: 14.15. 8: 16.17. 9: return

12、 buffer;18.19. 10: 复制代码3、 算法主函数:1. 1: void serial()2.3. 2: 4.5. 3: int i;6.7. 4: int array_length = ARRAY_LENGTH;8.9. 5: 10.11. 6: int *init_array;12.13. 7: int *sort_array;14.15. 8: int *position;16.17. 9: 18.19. 10: / array_length = get_array_length(4);20.21. 11: 22.23. 12: sort_array = (int *)my_

13、malloc(sizeof(int) * array_length);24.25. 13: init_array = (int *)my_malloc(sizeof(int) * array_length);26.27. 14: 28.29. 15: array_builder(init_array, array_length);30.31. 16: 32.33. 17: position = get_array_elem_position(init_array, array_length, 0, array_length);34.35. 18: 36.37. 19: for(i = 0; i array_length; i+)38.39. 20: sort_arrayposition = init_array;40.41. 21: 42.43. 22: printf(“串行实行结果:n“);44.45. 23: init_sort_array_print(init_array, sort_array, array_length);46.47. 24:

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报