Scarl - 1 year ago 62

Java Question

I was asked to sort and search an array. The sorting the array was simple and my code worked but then whenever I try to call the binary search method it works for the first element in the array but gives me "-1" as a result

My full code is as follows:

`public static void main(String[] args) {`

int[] array = new int[5];

array[0] = 50;

array[1] = 40;

array[2] = 10;

array[3] = 20;

array[4] = 100;

sort(array, (array.length - 1));

for (int x = 0; x < array.length; x++) {

System.out.println(" " + array[x]);

}

System.out.println("");

System.out.println("Binary search (R): " + rBsearch(array, 0, (array.length), 20));

}

public static void sort(int[] a, int last) {

if (last > 0) {

int max = findMax(a, last);

swap(a, last, max);

sort(a, last - 1);

}

}

public static int rBsearch(int[] L, int low, int high, int k) {

int mid = (low + high) / 2;

if (low > high) {

return -1;

} else if (L[mid] == k) {

return mid;

} else if (L[mid] < k) {

return rBsearch(L, k, mid + 1, high);

} else {

return rBsearch(L, k, low, mid - 1);

}

}

public static int findMax(int[] arr, int last) {

int max = 0;

for (int i = 0; i <= last; i++) {

if (arr[i] > arr[max]) {

max = i;

}

}

return max;

}

public static void swap(int[] arr, int last, int max) {

int temp = arr[last];

arr[last] = arr[max];

arr[max] = temp;

}

Answer Source

You goofed up the binary search intervals

```
public static int rBsearch(int[] L, int low, int high, int k) {
int mid = (low + high) / 2;
if (low > high) {
return -1;
} else if (L[mid] == k) {
return L[mid];
} else if (L[mid] < k) {
return rBsearch(L, mid + 1, high, k);
} else {
return rBsearch(L, low, mid - 1, k);
}
}
```