You are on page 1of 6

Parallel Sorting

• Sorting is one of the importing algorithm of the computer science. Various serial sorting
algorithms have been proposed with various complexity.
Comparison Sorts
Non-Comparison Sorts
Parallel Sorting
#include <stdio.h> // Generate random integers
#include <stdlib.h> #pragma omp parallel for schedule(static)
#include <time.h> for (i = 0; i < N; i++)
#include <omp.h> a[i] = rand() % 50;
// Display
const int N = 60; NewLine();PrintArray(a);NewLine();
void NewLine(void); double start = omp_get_wtime();
void PrintArray(int a[]); //BubbleSort(a);
void BubbleSort(int a[]); OddEvenTranSort(a);
void OddEvenTranSort(int *a); double etime = omp_get_wtime() - start;
// printf("Elapsed time = %lf\n", etime);
int main() { NewLine();PrintArray(a);NewLine();
int i,t, prod = 1, Sprod = 1, a[N]; // Parallel Section
bool flag = true; #pragma omp parallel for private(i) reduction(+:prod)
// Serial Section for (i = 0; i < N; i++)
srand(time(0)); prod += a[i];
// Parallel Section // Serail Section
#pragma omp parallel shared(a)private(i) printf("Serial Prod = %d Parallel Prod =%d\n", prod, prod);
//
return 0;
}
Bubble Sort
void BubbleSort(int a[]) void NewLine(void){
{ printf("\n");
int i, t;
bool flag = true; }
while (flag == true){ void PrintArray(int a[])
flag = false; {
#pragma omp parallel shared(flag, a)private(i, t)
#pragma omp parallel for schedule(static) for (int i = 0; i < N; i++)
for (i = 0; i < N-1; i++) printf("%d\t", a[i]);
if (a[i+1] < a[i]){
}
t = a[i+1];
a[i+1] = a[i];
a[i] = t;
flag = true;
}
}
}
Odd-Even Transposition Sort
void OddEvenTranSort(int a[]){ //Odd Tranposition Sort Phase
int i, t; #pragma omp parallel shared(flag, a)private(i, t)
bool flag; #pragma omp parallel for schedule(static)
do{ for(i = 1;i < N-1; i+=2){
flag = false; //Swapping
//Even Tranposition Sort Phase if(a[i] > a[i+1]){
#pragma omp parallel shared(flag, a)private(i, t) t = a[i];
#pragma omp parallel for schedule(static) a[i] = a[i+1];
for(i=0;i< N-1;i+=2) a[i+1] = t;
{ flag = true;
//Swapping }
if(a[i] > a[i+1]){ }
t = a[i]; }while(flag);
a[i] = a[i+1]; }
a[i+1] = t;
flag = true;
}
}

You might also like