常用的查找算法有:
二分查找的条件:
因为数组时有序的,首先找到要查找的数组中间位置的下标
然后将要查找的数和
arr[mid]
数组中间位置的值进行比较如果要找的数与中间数相等,就返回
如果要查找的数在中间数的左边,向左递归进行查找,在右边就向右递归进行查找
如果递归完整个数组仍未找到要找的数,结束递归退出
给定一个数组内元素有序的数组,通过二分查找找到需要查找的数的位置,如果值存在返回下标,否则返回 -1
下面数组中所有元素是不重复的
public static void main(String[] args) { int[] arr = {1,3, 5, 32, 34, 234}; int i = binarySearch(arr, 0, arr.length - 1, 34); System.out.println(i); } /** * 二分查找算法 * @param arr 数组 * @param left 左边的索引 * @param right 右边的索引 * @param finalVal 要查找的值 * @return 找到返回下标,未找到返回 -1 */ public static int binarySearch(int[] arr, int left, int right, int finalVal) { int mid = (left + right) / 2; // 找到中间位置 mid int midValue = arr[mid]; // 中间位置的值 midValue // 左边下标大于右边,返回 -1 if (left > right) { return -1; } // 看要查找的值在中间位置值的左边还是右边,进行递归。如果中间值为要查找的值则返回 if (finalVal > midValue) { return binarySearch(arr, mid + 1, right, finalVal); } else if (finalVal < midValue) { return binarySearch(arr, left, mid - 1, finalVal); } else { return mid; } }