---------------------------------------1.折半查询--------------------------------------------------
public class banzhe {
/*
* 寻找排好序的数组中的一个值(不是排好序的用不了)
*
* @param array要查找的数组
*
* @param value查找的值
*
* @param left左边界,这个值必须位于数组长度区间内
*
* @param right右边界,这个值必须位于数组长度区间内 0return找到的值在数组中的位置,如果没找到就返回-1
*/
static int binarySearch(int[] array, int value, int left, int right) {
if (left > right) {// 退出条件
return -1;// "没找到指定的元素
}
int middle = (left + right) >>> 1; // 相当于mid = (left+right) /2
if (array[middle] == value) {
System.out.println("middle=" + middle);
System.out.println("array[middle]=" + array[middle]);
return middle; // 找到了
} else if (array[middle] > value) {
return binarySearch(array, value, left, middle - 1);
}// 递归调用查找左边
else {
return binarySearch(array, value, middle + 1, right);
}// 递归调用查找右边
}
public static void main(String[] args) {
int[] data = { 3, 4, 5, 6, 7 };
System.out.println(data.length);
// 调用binarySearch方法,其中left的初始值是0,right的初始值是数组长度
int ret = binarySearch(data, 6, 0, data.length);
System.out.println(ret);// "输出3
}
}
---------------------------------------2.动态折半查询--------------------------------------------------
public class dongtaibanzhe {
//要查找动态数组中已经排好序的元素,可以直接调用Collections.binarySearch方法。
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//增加一些整数
list.add(3);
list.add(7);
list.add(6);
list.add(9);
//在调用binarySearch ()方法之前,先对集合中的元素排序
Collections.sort(list);
//得到元素2所在的位置,如果没有找到,就返回一个负数
int index = Collections.binarySearch(list, 3);
if (index >=0) {
System.out.println("找的位置:"+index);
}
}
}
---------------------------------3.动态折半查询-----------------------------------------------
public class dongtaibanzhe {
//要查找动态数组中已经排好序的元素,可以直接调用Collections.binarySearch方法。
public static void main(String[] args) {
int[] ids = {3,7,6,9}; //待查找的数组
Arrays.sort(ids);
int index = Arrays.binarySearch(ids,3);
if (index >= 0) {
System.out.println("n找到的位置:"+ index);
}
}
}