给定一个有序
数组,查找数组中某个元素的索引。
原理: 每次将搜索区间一分为二
,比较目标值和中心值大小,再决定下一步要从左区间搜索还是右区间搜索。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @Test public void testBinarySearch() { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; System.out.println(binarySearch(arr, 2)); }
private int binarySearch(int[] arr, int key) { int low = 0; int high = arr.length - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { low = mid + 1; } else { high = mid - 1; } } return -1; }
|