#include <stdio.h>
#include <stdlib.h>
 
int* combineIntArray(const int* arr1, const int arr1size,
	const int* arr2, const int arr2size) {
	int* combinedArray = (int*)malloc((arr1size + arr2size)*sizeof(int));
	int i, j;
	for (i = 0; i < arr1size; i++) {
		combinedArray[i] = arr1[i];
	}
	for (j = 0; j < arr2size; j++) {
		combinedArray[i + j] = arr2[j];
	}
	return combinedArray;
}
 
void insertElementAtIndex(int* arr, const int arrSize,
	const int elementToInsert, const int insertionIndex) {
 
	if (insertionIndex >= arrSize) { return; }
 
	int i = arrSize - 2;
	while (1) {
		arr[i + 1] = arr[i];
		if (i == insertionIndex) {
			arr[i] = elementToInsert;
			break;
		}
		i--;
	}
}
 
void bubbleSortAscending(int* arr, const int arrSize) {
	int temp;
	for (int j = 0; j < arrSize - 1; j++) {
		for (int i = 0; i < arrSize - j - 1; i++) {
			if (arr[i] > arr[i + 1]) {
				// swap
				// printf("swapping %d and %d\n", arr[i], arr[i+ 1]);
				temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
				continue;
			}
		}
	}
}
 
int binarySearch_iterative(const int* arr, const int arrSize,
	const int target) {
	int low = 0;
	int high = arrSize - 1;
	int mid;
 
	while (low <= high) {
		mid = (low + high)/2;
 
		if (arr[mid] == target) {
			return mid;
		} else if (arr[mid] > target) {
			high = mid - 1;
			continue;
		} else {
			low = mid + 1;
			continue;
		}
	}
 
	return -1;
}
 
int binarySearch_recursive(const int* arr, int low, int high,
	const int target) {
	if (high >= low) {
		int mid = (low+ high)/2;
 
		if (arr[mid] == target) {
			return mid;
		}
 
		if (arr[mid] > target) {
			return binarySearch_recursive(arr, low, mid - 1, target);
		}
 
		return binarySearch_recursive(arr, mid + 1, high, target);
	}
	return -1;
}
 
void printArray(const int* arr, const int arrSize) {
	for (int i = 0; i < arrSize; i++) {
		printf("%d    ", arr[i]);
	}
	printf("\n");
}
 
int main() {
	int i;
	int a[4] = {1,2,3,4};
	int b[3] = {5,6,7};
 
	int* c = combineIntArray(a, 4, b, 3);
 
	printArray(c, 7);
 
	int x[5] = {1,2,3,4};
 
	insertElementAtIndex(x, 5, -69, 1);
 
	printArray(x, 5);
 
	int y[9] = {10, -69, 34546, 565, -67, 353, 12, 56, 8};
	bubbleSortAscending(y, 9);
 
	printArray(y, 9);
 
	printf("%d\n", binarySearch_iterative(y, 9, 12));
	printf("%d\n", binarySearch_recursive(y, 0, 9 - 1, 12));
 
	return 0;
}
```binarySearch_iterative(y, 9, 12));
	printf("%d\n", binarySearch_recursive(y, 0, 9 - 1, 12));
 
	return 0;
}