package com.yu.search; import java.util.ArrayList; import java.util.List; /** * 二分查找算法 * @author Administrator * */ public class BinarySearch { public static void main(String[] args) { int[] arr = {1,8,10,24,24,24,56,99}; List<Integer> lists = binarySearch1(arr,0,arr.length-1,24); System.out.println(lists); } /** * 二分查找算法返回所有的下标 * @param arr * @param i * @param j * @return */ private static List<Integer> binarySearch1(int[] arr, int left, int right,int findValue) { if(left > right) { return new ArrayList<>(); } int mid = (left + right) / 2; int midVal = arr[mid]; if(midVal < findValue) { return binarySearch1(arr,mid+1,right,findValue); }else if(midVal > findValue) { return binarySearch1(arr,left,mid-1,findValue); }else { List<Integer> list = new ArrayList<>(); list.add(mid); int temp = mid-1; while(true) { if(temp < 0 || arr[temp] != midVal) { break; } list.add(temp); temp-=1; } temp = mid+1; while(true) { if(temp > right || arr[temp] != midVal) { break; } list.add(temp); temp+=1; } return list; } } /** * 二分查找算法 * @param arr * @param i * @param j * @return */ private static int binarySearch(int[] arr, int left, int right,int findValue) { if(left > right) { return -1; } int mid = (left + right) / 2; int midVal = arr[mid]; if(midVal < findValue) { return binarySearch(arr,mid+1,right,findValue); }else if(midVal > findValue) { return binarySearch(arr,left,mid-1,findValue); }else { return mid; } } } |