赫赫呵呵 2017-04-28 02:20 采纳率: 0%
浏览 2179

快速排序 OpenMP并行程序

#include

#include

#include

#include

int numThread=2;
void quicksort(int *A, int l, int u)
{
if(l >= u)
{
return;
}
int first = l;
int last = u;
int key = A[first]; //用字表的第一个记录作为枢轴
while(first < last)
{
while(first < last && A[last] >= key)
{
--last;
}

    A[first] = A[last]; //将比第一个小的移到低端

    while(first < last && A[first] <= key)
    {
        ++first;
    }
    A[last] = A[first];    

//将比第一个大的移到高端
}
A[first] = key; //枢轴记录到位
quicksort(A,l,first-1);
quicksort(A,first+1,u);
}
void main(int argc, char *argv)

{

omp_set_num_threads(numThread);
int j=50000,k=0,i=0;

int m=0,n=0;

double start,end,difftime1,difftime2;

int len=50000;

int len2=len/2;
int B[50000],C[25000],D[25000];

#pragma omp parallel default(none) shared(B,len) private(i)
{

#pragma omp for

for(i=0;i<len;i++)

{

B[i]=1+rand()%50000; //初始化B数组

}
}

//串行程序
start=clock(); //开始计时

quicksort(B,0,len-1);

end=clock(); //结束计时
difftime1=(end-start)/1000;
printf("%lf seconds\n",difftime1); //输出运行时间

//多线程程序
start=clock(); //开始计时
#pragma omp parallel default(none) shared(B,C,D,len2) private(i)
{

#pragma omp for

for(i=0;i<len2;i++) //这个for循环是并行的

{

C[i]=B[i]; //将B的前25000个数放入C
D[i]=B[i+25000]; //将B的后25000个数放入D
}

}

#pragma omp parallel default(none) shared(C,D,len2) //private(i)快速排序的并行
{

#pragma omp parallel sections

{

#pragma omp section

quicksort(C,0,len2-1); //对C排序
#pragma omp section

quicksort(D,0,len2-1); //对D排序
}

}
for(;k<len;k++) //将C和D进行归并排序放入B里面

{
if(m<len2&&n<len2)

{

if(C[n]<=D[m])

{

B[k]=C[n];

n++;

}

else

{

B[k]=D[m];

m++;

}

}

if(m==len2||n==len2)

{

if(m==len2)

B[k]=D[m];

else

B[k]=C[n-1];

k+=1;

break;

}

}

if(n<len2)

{

int tem=len2-n;

for(int p=0;p<tem;p++)

{

B[k]=C[n];

n++;

k++;

}

}

else if(m<len2)

{

int tem=len2-m;

for(int q=0;q<tem;q++)

{

B[k]=D[m];

m++;

k++;

}

}
end=clock(); //结束计时

difftime2=(end-start)/ 1000;

printf("%lf seconds\n",difftime2); //输出运行时间
printf("speed ratio=%.3f\n",difftime1/difftime2); //加速比
system("pause");

}

总是运行不出来结果

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?