quiksort.c
来自「用OPENMP编写的 并行实现快速排序的程序!」· C语言 代码 · 共 74 行
C
74 行
#include<stdio.h>
#include<math.h>
#include <omp.h>
#define N 200
#define NUM_THREADS 2
int rand(void);
int partition(int b[],int,int);
void quicksort(int b[],int,int);
void main(){
int a[N];
int i;
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel
{
int id;
id = omp_get_thread_num();
for(i=id;i<N;i=i+NUM_THREADS){
a[i]=rand()%200;
printf("%4d",a[i]);
}
}
quicksort(a,1,N-1);
for(i=1;i<N;i++){
printf("\n");
printf("%4d",a[i]);
}
}
//#pragma omp parallel
void quicksort(int r[], int s,int t){
int i;
if(s<t){
i=partition(r,s,t);
#pragma omp parallel sections
{
#pragma omp section
{
quicksort(r,s,i-1);
}
#pragma omp section
{
quicksort(r,i+1,t);
}
}
}
}
int partition(int r[],int low,int high){
r[0]=r[low];
while(low<high){
while(low<high&&r[0]<r[high]) high--;
if(low<high){
r[low]=r[high];
low++;
}
while(low<high&&r[0]>r[low]) low++;
if(low<high){
r[high]=r[low];
high--;
}
}
r[low]=r[0];
return low;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?