冒泡排序-MPI并行冒泡二路归并排序问题

问题描述

MPI并行冒泡二路归并排序问题

我思路是想吧随机产生的数组a 按照总进程数分s份 然后分到别的进程冒泡排序,然后在聚集回来 二路归并下边是代码 求大神帮忙改改~~~
// mpi.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "mpi.h"
#include
#include
#include
#include
#include
using namespace std;

void merge(int x[],int z[],int s,int u,int v) //2-路·归并排序
{

int i,j,q;

i=s;

j=u+1;

q=s;

while(i<=u&&j<=v)

{

if(x[i]<=x[j])

z[q++]=x[i++];

else

z[q++]=x[j++];

}

while(i<=u) //将X中剩余元素X[i..u]复制到Z

z[q++]=x[i++];

while(j<=v) //将X中剩余元素X[j..v]复制到Z

z[q++]=x[j++];

}
void bubble(int a[],int n)
{
int i,j,t;
for(i=0;i
for(j=0;j
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
void main(int argc, char* argv[])
{
MPI_Comm comm=MPI_COMM_WORLD;
int n,m,rank,size,i,r,s,step;
int *a,*b,*c,*d,*e;
a=(int *)malloc(n*sizeof(int));
e=(int *)malloc(n*sizeof(int));
double startwtime,endwtime;

MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);

if(rank==0){
    cout<<"输入数列上限:";
    cin>>n;
    cout<<"输入整数范围:";
    cin>>m;
    srand(unsigned(time(0)));
    cout<<"产生的随机数列?:";
    s=n/size;r=n%size;
    b=(int *)malloc(n+rank-r*sizeof(int));
    for(i=0;i<n;i++)
    {
        a[i]=rand()%m;
        b[i]=a[i];
        cout<<a[i]<<" ";
    }
    cout<<endl;
    if(r!=0)
    {
        for(i=n;i<n+rank-r;i++)
        {
            b[i]=0;
        }
        s=s+1;
    }
startwtime=MPI_Wtime();
MPI_Scatter(a,s,MPI_INT,b,s,MPI_INT,0,comm);
bubble(b,s);
}
else
{
    c=(int *)malloc(s*sizeof(int));
    MPI_Scatter(a,s,MPI_INT,c,s,MPI_INT,0,comm);
    bubble(c,s);
}
if(rank!=0)
{
    d=(int *)malloc(n*sizeof(int));
    MPI_Gather(d,s,MPI_INT,b,s,MPI_INT,0,comm);
    MPI_Gather(d,s,MPI_INT,c,s,MPI_INT,0,comm);
    merge(d,e,0,n/2-1,n-1);
}
if(rank==0){
    cout<<"排序结果:";
    for(i=0;i<n;i++)
    {
        cout<<e[i]<<" ";
    }
    cout<<endl;
    endwtime=MPI_Wtime();
    cout<<"wall clock time="<<endwtime-startwtime<<endl;
}
MPI_Finalize();

}

解决方案

我思路是想吧随机产生的数组a 按照总进程数分s份 然后分到别的进程冒泡排序,然后在聚集回来 二路归并下边是代码 求大神帮忙改改~~~

解决方案二:

ytrytfyg我思路是想吧随机产生的数组a 按照总进程数分s份 然后分到别的进程冒泡排序,然后在聚集回来 二路归并下边是代码 求大神帮忙改改~~~

时间: 2024-12-02 23:51:59

冒泡排序-MPI并行冒泡二路归并排序问题的相关文章

MPI并行出错 BAD TERMINATION OF ONE OF YOUR PROCESSES

问题描述 MPI并行出错 BAD TERMINATION OF ONE OF YOUR PROCESSES 计算"> 情况就是上图,可以编译,但运行到一部分就终止了,什么原因啊?

山寨版AS3事件冒泡机制的实现

AS3实现了事件传递,分成三段Capture,target和bubble,其中bubble就是向树根传递.这个机制非常之经典和好用,可惜它只存在在基于DisplayObject的对象树中,其它时候只能把事件老老实实的从一个对象直接传递到另一个对象. 这次我来玩个有趣的.仿造AS3内置的机制来制作一个更加通用的冒泡框架,相信可以用很多用处(至少已经用在我的项目上了).自己实现事件传递,让它支持任何事件任何数据结构(无论队列,还是树),甚至可以传递任何对象(而不仅限于事件对象).其实bubble的过

javascript中数组的冒泡排序使用示例

 数组的冒泡排序很实用,不过还是有些同学们不会,于是在本文为大家详细介绍下,感兴趣的朋友不要错过  代码如下: <html>  <head>  <title>数组的排序</title>    <script>  var arr = [2,4,9,11,6,3,88];  //采用冒泡排序,向上冒泡,最小值在最上边  for(var x = 0 ; x < arr.length; x++){//控制趟数  for(var y = x + 1

javascript事件冒泡实例分析_javascript技巧

本文实例讲述了javascript事件冒泡.分享给大家供大家参考.具体分析如下: 事件冒泡:  如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发, 触发的顺序是"由内而外".验证:在页面上添加一个table,table里有tr,tr里有td,td里放一个p, 在p,td,tr,table中添加事件响应 <html xmlns="http://www.w3.org/1999/xhtml"> <he

详解javascript事件冒泡_javascript技巧

事件是javascript中的核心内容之一,在对事件的应用中不可避免的要涉及到一个重要的概念,那就是事件冒泡,在介绍事件冒泡之前,先介绍一下另一个重要的概念事件流:一.什么是事件流: 文档对象模型(DOM)是一个树形结构,可以形象的用下图表示. 如果一个html元素触发事件,那么这个事件就会在DOM树中的触发节点和根节点之间按照一定的顺序传播,所有经过的节点都会接收到被触发的事件,这个传播过程被称之为事件流.按照事件的传播顺序,可以将其分为两类,一种是事件冒泡,一种是事件捕获,这里就涉及到本章要

javascript中数组的冒泡排序使用示例_javascript技巧

复制代码 代码如下: <html> <head> <title>数组的排序</title> <script> var arr = [2,4,9,11,6,3,88]; //采用冒泡排序,向上冒泡,最小值在最上边 for(var x = 0 ; x < arr.length; x++){//控制趟数 for(var y = x + 1 ; y < arr.length ; y++){ //依次比较,如果后面的元素大于前面的元素则交换 i

Oracle并行操作之并行查询实例解析_oracle

Oracle数据库的并行操作特性,其本质上就是强行榨取除数据库服务器空闲资源(主要是CPU资源),对一些高负荷大数据量数据进行分治处理.并行操作是一种非确定性的优化策略,在选择的时候需要小心对待.目前,使用并行操作特性的主要有下面几个方面: Parallel Query:并行查询,使用多个操作系统级别的Server Process来同时完成一个SQL查询: Parallel DML:并行DML操作.类似于Parallel Query.当要对大数据量表进行DML操作,如insert.update和

PHP 四种基本排序算法的代码实现(1)

许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具.这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路. 前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序

《FLUENT 14.0超级学习手册》——第2章 FLUENT软件介绍2.1 FLUENT软件特点简介

第2章 FLUENT软件介绍 FLUENT 14.0超级学习手册 CFD商业软件FLUENT是通用CFD软件包,用来模拟从不可压缩到高度可压缩范围内的复杂流动.由于采用了多种求解方法和多重网格加速收敛技术,因而FLUENT能达到最佳的收敛速度和求解精度.灵活的非结构化网格和基于解的自适应网格技术及成熟的物理模型,使FLUENT在转换与湍流.传热与相变.化学反应与燃烧.多相流.旋转机械.动/变形网格.噪音.材料加工.燃料电池等方面有广泛的应用. 学习目标: 学习FLUENT软件的主要特点: 了解F