Looks like there is an error in the binary search algorithm:
binarySearch (numarray, left, right, x) {
if (left > right) { return -1; }
int mid = 1 + (right - 1)/2;
if (numarray[mid] == x) { return mid; }
if (numarray[mid] > x)
{ return binarySearch (numarray, left,
mid -1, x); }
return binarySearch (numarray, mid + 1, right, x);
}
Calculation of int mid = 1 + (right - 1)/2; should include left also.