基于 OpenMP 的奇偶排序算法的实现

代码:

#include <omp.h>
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int NUM = 8000;
const int MAX = 1000000;
const int MIN = 0;
const int NUM_THREADS = 8;

int arr[NUM];

int main() {
	cout << "Odd-even transportion sort start..." << endl;
	cout << "Generate random data... ";
	memset(arr, 0, NUM * sizeof(arr[0]));
	srand(time(NULL));
	omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for
	for (int i = 0; i < NUM; i++) {
		arr[i] = MIN + rand() % (MAX - MIN);
	}
	cout << "Done." << endl;
	cout << "Sorting... ";
	for (int i = 0; i < NUM; i++) {
		if (i % 2 == 0) {
#pragma omp parallel for
			for (int j = 0; j < NUM - 1; j += 2) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		} else {
#pragma omp parallel for
			for (int j = 1; j < NUM - 1; j += 2) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
	cout << "Done." << endl;
	cout << "Result:" << endl;
	int counter = 1;
	int row = 20;
	for (int i = 0; i < NUM; i++,counter++) {
		cout << arr[i] << " ";
		if (counter % row == 0) cout << endl;
	}
}

截图:

原文地址:https://www.cnblogs.com/justsong/p/12219723.html