package search; import java.util.ArrayList; public class BinarySearch { public static void main(String[] args) { int[] arr = {-7,1,6,10,100,100,100,1000}; // int index = binarySearch(arr,0, arr.length-1, 9); // if (index == -1){ // System.out.println("该数组中没有要查找的值"); // }else { // System.out.printf("查找的值在数组中的索引为:%d",index); // } ArrayList<Integer> list = binarySearch2(arr,0,arr.length-1,9); System.out.println(list); } //二分查找的前提是必须是有序数组 public static int binarySearch(int[] arr, int left, int right, int findVal){ int mid = (left + right)/2; if (left > right){ return -1; } if (arr[mid] > findVal){ return binarySearch(arr, left, mid - 1, findVal); }else if (arr[mid] < findVal){ return binarySearch(arr, mid+1, right, findVal); }else { return mid; } } public static ArrayList<Integer> binarySearch2(int[] arr, int left, int right, int findVal){ int mid = (left + right)/2; if (left > right){ return new ArrayList<Integer>(); } if (arr[mid] > findVal){ return binarySearch2(arr, left, mid - 1, findVal); }else if (arr[mid] < findVal){ return binarySearch2(arr, mid+1, right, findVal); }else { ArrayList<Integer> list = new ArrayList<>(); int temp = mid - 1; while (temp >= left && arr[temp] == findVal){ list.add(temp); temp--; } list.add(mid); temp = mid + 1; while (temp <= right && arr[temp] == findVal){ list.add(temp); temp++; } return list; } } }
Java数据结构《查找算法》二分查找
最新推荐文章于 2024-07-12 16:27:59 发布