Algorithm
merge(arr, low, mid, high)
Begin
Declare i = low
Declare j = mid + 1
Declare k = 0
Declare newArr[high - low + 1];
while (i <= mid && j <= high), do
if (arr[i] <= arr[j]), then
Set newArr[k] = arr[i];
Increment i by 1
Increment k by 1
else
Set newArr[k] = arr[j]
Increment j by 1
Increment k by 1
End If
End While
while (i <= mid), do
Set newArr[k] = arr[i]
Increment k by 1
Increment i by 1
End While
while (j <= high), do
Set newArr[k] = arr[j]
Increment k by 1
Increment j by 1
End While
for (i = 0; i < k; i++), do
Set arr[low + i] = newArr[i]
End For
End
mergesort(arr, low, high)
Begin
if (low >= high) return
Set mid = low + (high - low) / 2
Call mergesort(arr, low, mid)
Call mergesort(arr, mid + 1, high)
Call merge(arr, low, mid, high)
End
binarySearch(arr, size, elem)
Begin
Declare start = 0
Declare stop = size - 1
Declare index = -1
while (start <= stop), do
Set mid = start + (stop - start) / 2
if (arr[mid] < elem), then
Set start = mid + 1
else if (arr[mid] > elem), then
Set stop = mid - 1
else
Set index = mid
break
End If
End While
return index
End
main()
Begin
Read array size, "size"
Declare arr[size]
for (i = 0; i < size; i++), do
Read element store in arr[i]
End For
Read element to search, "elem"
Call mergesort(arr, 0, size - 1)
Display sorted array "arr"
Set index = binarySearch(arr, size, elem)
if (index == -1), then
Display "Element not found"
else
Display "Element found at position " + (index + 1)
End If
End
Program
#include <stdio.h>
void merge(int *arr, int low, int mid, int high) {
int i = low;
int j = mid + 1;
int k = 0;
int newArr[high - low + 1];
while (i <= mid && j <= high) {
if (arr[i] <= arr[j]) newArr[k++] = arr[i++];
else newArr[k++] = arr[j++];
}
while (i <= mid) newArr[k++] = arr[i++];
while (j <= high) newArr[k++] = arr[j++];
for (int i = 0; i < k; i++)
arr[low + i] = newArr[i];
}
void mergeSort(int *arr, int low, int high) {
if (low >= high) return;
int mid = low + (high - low) / 2;
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
int binarySearch(int *arr, int size, int elem) {
int start = 0;
int stop = size - 1;
int index = -1;
while (start <= stop) {
int mid = start + (stop - start) / 2;
if (arr[mid] > elem) {
stop = mid - 1;
} else if (arr[mid] < elem) {
start = mid + 1;
} else {
index = mid;
break;
}
}
return index;
}
int main() {
int size, elem;
printf("Enter array size: ");
scanf("%d", &size);
int arr[size];
printf("Enter array elements: ");
for (int i = 0; i < size; i++)
scanf("%d", &arr[i]);
printf("Enter element to search: ");
scanf("%d", &elem);
mergeSort(arr, 0, size - 1);
printf("Sorted Array: ");
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
int index = binarySearch(arr, size, elem);
if (index == -1) printf("\n\nElement not found\n");
else printf("\n\nElement found at position %d\n", (index + 1));
}