递归查找元素在有序数组中的位置:
/*
递归实现二分查找
*/
private static int indexOf(int[] list, int left, int right, int target) {
while (left <= right) {
int index = (left + right) / 2;
if(list[index] == target){
return index;
}else if (list[index] > target) {
return indexOf(list, left, index - 1, target);
} else if (list[index] < target) {
return indexOf(list, index + 1, right, target);
}
}
return -1;
}
新增需求:若一个元素不在数组中,获取前一个元素与后一个元素的位置:
/*
若查找的元素在数组中,则返回该元素的位置,用数组的形式来表示 {index}
若查找的元素不在数组中,返回{right, left},分别为左边的元素的位置与右边元素的位置。
若查找的元素超出了数组的范围,返回{-1}
*/
private static int[] indexOf(int[] list, int left, int right, int target) {
while (left <= right) {
int index = (left + right) / 2;
if(list[index] == target){
return new int[]{index};
}else if (list[index] > target) {
return indexOf(list, left, index - 1, target);
} else if (list[index] < target) {
return indexOf(list, index + 1, right, target);
}
}
if(right<0 || left>list.length-1){
return new int[] {-1};
}else {
return new int[]{right, left};
}
}
测试类:
/*
测试用例:查找从-2开始到42的数字
*/
public class Test {
public static void main(String[] args) {
int[] a = {1, 8, 12, 15, 16, 21, 30, 35, 39, 39};
for (int i = -2; i <= 42; i++) {
System.out.println(i + ": " + Arrays.toString(BinarySearch.indexOf(a, 0, a.length - 1, i)));
}
}
}

1059

被折叠的 条评论
为什么被折叠?



