折半查找
---------------------------------------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); } } }