public class BinarySearch {
public static void main(String[] args) {
int[] arr = { 1, 2, 2, 2, 2, 3, 4, 5, 6 };
int i = binary(arr, 2);
System.out.println("index:" + i);
}
/**
*
* @param arr 待查找的数组
* @param target 需要查找的数
* @return 返回对应的下标 -1表示没找到
*/
public static int binary(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (target > arr[mid]) {
left = mid + 1;
} else if (target < arr[mid]) {
right = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
public class BinarySearch {
public static void main(String[] args) {
int[] a = { 1, 23, 34, 45, 56, 67, 100, 100, 100, 100, 120, 130 };
List<Integer> list = binary(a, 0, a.length - 1, 100);
System.out.println("找到的下标:" + list);
}
public static List<Integer> binary(int[] a, int left, int right, int value) {
System.out.println("被调用");
if (left > right) {
return new ArrayList<Integer>();
}
int mid = (left + right) / 2;
if (value > a[mid]) {
return binary(a, mid + 1, right, value);
} else if (value < a[mid]) {
return binary(a, left, mid - 1, value);
} else {
List<Integer> list = new ArrayList<Integer>();
int temp = mid + 1;
while (true) {
if (temp > a.length - 1 || a[temp] != value) {
break;
}
list.add(temp);
System.out.println("右边:" + temp);
temp++;
}
list.add(mid);
System.out.println("mid:" + mid);
temp = mid - 1;
while (true) {
if (temp < 0 || a[temp] != value) {
break;
}
list.add(temp);
System.out.println("左边:" + temp);
temp--;
}
return list;
}
}
}