#include <iostream>
#include <omp.h>
#include <chrono>
#include <cstdlib>
using namespace std;
using namespace chrono;
void bubbleSort(int arr[], int n)
{
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(arr[j] > arr[j+1])
swap(arr[j], arr[j+1]);
}
void parallelBubbleSort(int arr[], int n)
{
for(int i=0;i<n;i++)
{
if(i%2==0)
{
#pragma omp parallel for
for(int j=0;j<n-1;j+=2)
if(arr[j] > arr[j+1])
swap(arr[j],arr[j+1]);
}
else
{
#pragma omp parallel for
for(int j=1;j<n-1;j+=2)
if(arr[j] > arr[j+1])
swap(arr[j],arr[j+1]);
}
}
}
int main()
{
int n = 1000;
int arr1[n], arr2[n];
for(int i=0;i<n;i++)
{
int val = rand()%1000;
arr1[i]=val;
arr2[i]=val;
}
auto start = high_resolution_clock::now();
bubbleSort(arr1,n);
auto end = high_resolution_clock::now();
cout<<"Sequential Bubble Sort Time: "
<<duration_cast<milliseconds>(end-start).count()<<" ms"<<endl;
start = high_resolution_clock::now();
parallelBubbleSort(arr2,n);
end = high_resolution_clock::now();
cout<<"Parallel Bubble Sort Time: "
<<duration_cast<milliseconds>(end-start).count()<<" ms"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8b21wLmg+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDxjc3RkbGliPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKCnZvaWQgYnViYmxlU29ydChpbnQgYXJyW10sIGludCBuKQp7CiAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspCiAgICAgICAgZm9yKGludCBqPTA7ajxuLWktMTtqKyspCiAgICAgICAgICAgIGlmKGFycltqXSA+IGFycltqKzFdKQogICAgICAgICAgICAgICAgc3dhcChhcnJbal0sIGFycltqKzFdKTsKfQoKdm9pZCBwYXJhbGxlbEJ1YmJsZVNvcnQoaW50IGFycltdLCBpbnQgbikKewogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHsKICAgICAgICBpZihpJTI9PTApCiAgICAgICAgewogICAgICAgICAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IKICAgICAgICAgICAgZm9yKGludCBqPTA7ajxuLTE7ais9MikKICAgICAgICAgICAgICAgIGlmKGFycltqXSA+IGFycltqKzFdKQogICAgICAgICAgICAgICAgICAgIHN3YXAoYXJyW2pdLGFycltqKzFdKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yCiAgICAgICAgICAgIGZvcihpbnQgaj0xO2o8bi0xO2orPTIpCiAgICAgICAgICAgICAgICBpZihhcnJbal0gPiBhcnJbaisxXSkKICAgICAgICAgICAgICAgICAgICBzd2FwKGFycltqXSxhcnJbaisxXSk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGludCBuID0gMTAwMDsKICAgIGludCBhcnIxW25dLCBhcnIyW25dOwoKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgaW50IHZhbCA9IHJhbmQoKSUxMDAwOwogICAgICAgIGFycjFbaV09dmFsOwogICAgICAgIGFycjJbaV09dmFsOwogICAgfQoKICAgIGF1dG8gc3RhcnQgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgYnViYmxlU29ydChhcnIxLG4pOwogICAgYXV0byBlbmQgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgY291dDw8IlNlcXVlbnRpYWwgQnViYmxlIFNvcnQgVGltZTogIgogICAgICAgIDw8ZHVyYXRpb25fY2FzdDxtaWxsaXNlY29uZHM+KGVuZC1zdGFydCkuY291bnQoKTw8IiBtcyI8PGVuZGw7CgogICAgc3RhcnQgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgcGFyYWxsZWxCdWJibGVTb3J0KGFycjIsbik7CiAgICBlbmQgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgY291dDw8IlBhcmFsbGVsIEJ1YmJsZSBTb3J0IFRpbWU6ICIKICAgICAgICA8PGR1cmF0aW9uX2Nhc3Q8bWlsbGlzZWNvbmRzPihlbmQtc3RhcnQpLmNvdW50KCk8PCIgbXMiPDxlbmRsOwoKICAgIHJldHVybiAwOwp9