MERGE SORT USING PARALLEL PROGRAMMING.
#include<stdio.h>
#include<omp.h>
#include<stdlib.h>
void merge(int arr[],int first,int mid,int last){
int i,j,k;
i=first;
k=first;
j=mid+1;
int t[first+last];
while((i<=mid)&&(j<=last)){
if(arr[i]<arr[j]){
t[k]=arr[i];
i++;
}
else{
t[k]=arr[j];
j++;
}
k++;
}
while(i<mid+1){
t[k]=arr[i];i++;
k++;
}
while(j<last+1){
t[k]=arr[j];j++;
k++;
}
for(i=first;i<=last;i++){
arr[i]=t[i];
}
return ;
}
void merge_sort(int arr[],int first,int last){
if(first<last){
int mid;
mid=(first+last)/2;
#pragma omp task firstprivate(arr,first,last)
merge_sort(arr,first,mid);
#pragma omp task firstprivate(arr,first,last)
merge_sort(arr,mid+1,last);
#pragma omp tastwait
merge(arr,first,mid,last);
}
}
int main()
{
int i,n;
double s,c;
printf("Enter number of elements :\n");
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
arr[i]=rand()%100;
}
for(i=0;i<n;i++){
printf("%d\t",arr[i]);
}
s=omp_get_wtime();
#pragma omp parallel
{
#pragma omp single
{
merge_sort(arr,0,n-1);
}
}
c=omp_get_wtime();
double t=c-s;
printf("\n\nTime taken :%f\n",t);
for(i=0;i<n;i++){
printf("%d\t",arr[i]);
}
return 0;
}
#include<omp.h>
#include<stdlib.h>
void merge(int arr[],int first,int mid,int last){
int i,j,k;
i=first;
k=first;
j=mid+1;
int t[first+last];
while((i<=mid)&&(j<=last)){
if(arr[i]<arr[j]){
t[k]=arr[i];
i++;
}
else{
t[k]=arr[j];
j++;
}
k++;
}
while(i<mid+1){
t[k]=arr[i];i++;
k++;
}
while(j<last+1){
t[k]=arr[j];j++;
k++;
}
for(i=first;i<=last;i++){
arr[i]=t[i];
}
return ;
}
void merge_sort(int arr[],int first,int last){
if(first<last){
int mid;
mid=(first+last)/2;
#pragma omp task firstprivate(arr,first,last)
merge_sort(arr,first,mid);
#pragma omp task firstprivate(arr,first,last)
merge_sort(arr,mid+1,last);
#pragma omp tastwait
merge(arr,first,mid,last);
}
}
int main()
{
int i,n;
double s,c;
printf("Enter number of elements :\n");
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
arr[i]=rand()%100;
}
for(i=0;i<n;i++){
printf("%d\t",arr[i]);
}
s=omp_get_wtime();
#pragma omp parallel
{
#pragma omp single
{
merge_sort(arr,0,n-1);
}
}
c=omp_get_wtime();
double t=c-s;
printf("\n\nTime taken :%f\n",t);
for(i=0;i<n;i++){
printf("%d\t",arr[i]);
}
return 0;
}
Comments
Post a Comment