You are on page 1of 3

Shuvadeep Mandal

Sub: ALGO-2
Sec: 7
Id: 2211200011003
Reg: 220110259629
#include <iostream>
using namespace std;
int *batcher(int u[], int v[], int m, int n) {
int i, j, *s;
if (m == 0) {
s = new int[n];
for (i = 0; i < n; ++i)
s[i] = v[i];
} else if (n == 0) {
s = new int[m];
for (i = 0; i < m; ++i)
s[i] = u[i];
} else if (m == 1 && n == 1) {
compare_interchange(u[0], v[0]);
s = new int[2];
s[0] = u[0];
s[1] = v[0];
} else {
int x, y;
if (m % 2 == 1) x = m / 2 + 1;
Else x = m / 2;
if (n % 2 == 1) y = n / 2 + 1;
else y = n / 2;
int *ou = new int[x];
int *ov = new int[y];
for (i = 0, j = 0; i < m; i += 2, ++j)
ou[j] = u[i];
for (i = 0, j = 0; i < n; i += 2, ++j)
ov[j] = v[i];
int *a = batcher(ou, ov, x, y);
delete[] ou;
delete[] ov;
int *eu = new int[m - x];
int *ev = new int[n - y];
for (i = 1, j = 0; i < m; i += 2, ++j)
eu[j] = u[i];
for (i = 1, j = 0; i < n; i += 2, ++j)
ev[j] = v[i];
int *b = batcher(eu, ev, m - x, n - y);
delete[] eu;
delete[] ev;
int c;
if (m % 2 == 0 && n % 2 == 0) c = m / 2 + n / 2 - 1;
else c = m / 2 + n / 2;
for (i = 1; i <= c; ++i)
compare_interchange(b[i - 1], a[i]);
s = new int[m + n];
s[0] = a[0];
for (i = 1, j = 1; i <= c; ++i) {
s[j++] = b[i - 1];
s[j++] = a[i];
}
if (m % 2 == 0 && n % 2 == 0) s[j+
+] = b[n / 2 + m / 2 - 1];
else if (m % 2 == 1 && n % 2 == 1)
s[j++] = a[n / 2 + m / 2 + 1];
delete[] a;
delete[] b;
}
return s;
}
void compare_interchange(int &x, int &y) {
if (x > y) {
int temp = x;
x = y;
y = temp;
}
}

int *batcherSort(int arr[], int l0, int n0) {


int *s;
if (n0 > 1) {
int mid = n0 / 2;
int m = mid;
int n = n0 - mid;
int *u = new int[m];
int *v = new int[n];
for (int i = 0; i < m; ++i)
u[i] = arr[l0 + i];
for (int i = 0; i < n; ++i)
v[i] = arr[l0 + mid + i];
u = batcherSort(u, 0, m);
v = batcherSort(v, 0, n);
s = batcher(u, v, m, n);
delete[] u;
delete[] v;
return s;
} else {
s = new int;
s[0] = arr[l0];
return s;
}
}

int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
int *arr = new int[n];
cout << "Enter the elements: ";
for (int i = 0; i < n; ++i)
cin >> arr[i];
int *p = batcherSort(arr, 0, n);
cout << "Sorted array: ";
for (int i = 0; i < n; ++i)
cout << p[i] << " ";
delete[] p;
delete[] arr;
return 0;
}

You might also like