public class BinarySearch {
private BinarySearch(){}
public static <E extends Comparable<E>> int search(E[] arr,E target){
int l = 0,r = arr.length;
// 在 data[l,r) 的范围中查找 target,前闭后开
while(l < r){
int mid = l + (r - l)/2;
if(arr[mid].compareTo(target) == 0){
return mid;
}
if(arr[mid].compareTo(target) < 0){
l = mid + 1;
}else{
r = mid;
}
}
return -1;
}
// > target 的最小值索引
public static <E extends Comparable<E>> int minIndex(E[] arr,E target){
int l = 0,r = arr.length;
// 在data[l,r]中寻找解
while(l < r){
int mid = l + (r - l)/2;
if(arr[mid].compareTo(target) <= 0){
l = mid + 1;
}else{
r = mid;
}
}
return l;
}
public static void main(String[] args) {
// Integer[] arr = {1,4,5,8,9,10,11,12,14,16,19};
// int index = BinarySearch.minIndex(arr, 5);
// System.out.println(index);
Integer[] arr = {1,1,3,3,5,5};
for (int i = 0; i <= 6; i++) {
System.out.print(BinarySearch.minIndex(arr,i) + " ");
}
System.out.println();
}
}
算法与数据结构——二分查找法(2)
最新推荐文章于 2024-08-21 09:53:46 发布