本文共 4555 字,大约阅读时间需要 15 分钟。
package binarysearch;public class Binary { public static void main(String[] args) { int[] arr = { 1,3,45,56,789,888,999}; System.out.println(binarySearch(arr,0,arr.length - 1,4)); } static int valIndex = - 1; public static int binarySearch(int[] arr,int left,int right,int searchVal){ //设置中间值的索引 int mid = (left + right) / 2; if(left < right){ if(arr[mid] == searchVal){ //如果找到对应的值,那就退出 valIndex = mid; }else if(arr[mid] > searchVal){ //如果你要找的值小于中间值,那就说明在左半边 binarySearch(arr,left,mid - 1,searchVal); }else if (arr[mid] < searchVal){ //如果你要找的值大于中间值,那就说明再右半边 binarySearch(arr,mid + 1,right,searchVal); }else{ valIndex = - 1; } return valIndex; } }}
问题分析:
教程代码:
public static int binarySearch(int[] arr,int left,int right,int searchVal){ //设置中间值的索引 int mid = (left + right) / 2; if (right >= left){ if(arr[mid] == searchVal){ //如果找到对应的值,那就退出 return mid; }else if(arr[mid] > searchVal){ //如果你要找的值小于中间值,那就说明在左半边 return binarySearch(arr,left,mid - 1,searchVal); }else if (arr[mid] < searchVal){ //如果你要找的值大于中间值,那就说明再右半边 return binarySearch(arr,mid + 1,right,searchVal); } } return -1; }
分析总结:
public static ListbinarySearch2(int[] arr,int left,int right,int searchVal){ //区别一下重写和重载:重载:两同一不同,同类同名,不同的形参.重写:原方法的覆盖,是子类对父类的继承. //这里都不是,形参列表不同,只有返回值类型不同,不是重载,没有继承,不是重写 int mid = (left + right) / 2; if (left <= right){ if (searchVal < arr[mid]){ return binarySearch2(arr,left,mid - 1,searchVal); }else if(searchVal > arr[mid]){ return binarySearch2(arr,mid + 1,right,searchVal); }else{ List list = new ArrayList<>(); int temp = mid; while (temp >= 0 && arr[temp] == arr[mid]){ list.add(temp); temp --; } temp = mid + 1; while (temp <= arr.length - 1 && arr[temp] == arr[mid]){ list.add(temp); temp ++; } return list; } } return new ArrayList<>(); }
分析总结:
#include#include int BinSearch(long num[],long x, int n);int main(){ long num[] = { 0,1},goal = 1; int index = BinSearch(num,goal,2); printf("index:%d",index); return 0;}int BinSearch(long num[],long x, int n){ int low = 0 , high = n - 1 , mid; while(low <= high) { //注意上面的判定条件一定是等号 if(num[high] == x) { return high; } mid = (low + high) / 2; if(num[mid] == x) { return mid; } else if(num[mid] < x) { high = mid - 1; } else { low = mid + 1; } } return -1;}
转载地址:http://uqgpb.baihongyu.com/