import java.util.ArrayList;
import java.util.List;
public class BinarySearch {
public static void main(String[] args) {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
System.out.println(Binarysearch(9, arr, 0, arr.length));
}
public static List<Integer> Binarysearch(int findval, int arry[], int left, int right) {
if (left > right) {
System.out.println("未查询到结果");
return new ArrayList<Integer>();
}
int mid = (left + right) / 2;
int midval = arry[mid];
if (findval > midval) {
return Binarysearch(findval, arry, mid + 1, right);
} else if (findval < midval) {
return Binarysearch(findval, arry, left, mid - 1);
} else {
List<Integer> list = new ArrayList<Integer>();
int temp = mid - 1;
while (true) {
if (temp < 0 || arry[temp] != findval) {// 退出
break;
}
// 否则,就temp 放入到 resIndexlist
list.add(temp);
temp -= 1; // temp左移
}
list.add(mid); //
// 向mid 索引值的右边扫描,将所有满足 1000, 的元素的下标,加入到集合ArrayList
temp = mid + 1;
while (true) {
if (temp > arry.length - 1 || arry[temp] != findval) {// 退出
break;
}
// 否则,就temp 放入到 resIndexlist
list.add(temp);
temp += 1; // temp右移
}
return list;
}
}
}