本文共 1799 字,大约阅读时间需要 5 分钟。
#二分查找及其扩展#
public int binarySearchV2(int[] a,int low,int high,int value) { if(low>high) return -1; while (low<=high){ int mid = (low+high)/2; if(a[mid] == value){ return mid; }else if(a[mid] > value){ return binarySearchV2(a,low,high-1,value); }else { return binarySearchV2(a,mid+1,high,value); } } return -1; }
- **非递归**
public int binarySearchV1(int[] a,int n,int value){ int low = 0; int high = n-1; while(low<=high){ int mid = (low+high)/2; if(a[mid] == value){ return mid; }else if(a[mid]>value){ high = mid - 1; }else{ low = mid+1; } } return -1; }
/** * 获取第一个等于给定值的值 * */ public static int getFisrtEquals(int[] a,int n,int value){ int low = 0; int high = n-1; while(low <= high){ int mid = low + ((high-low)>>1); if(a[mid] >value){ high = mid-1; }else if(a[mid]>1); if(a[mid] >value){ high = mid -1; }else if(a[mid] >1); if(a[mid] >1); if(a[mid]>value){ high = mid-1; }else{ // 应该就比较好理解了 if(mid==n || a[mid+1]>value) return mid; else low=mid+1; } } return -1; }
转载地址:http://chiii.baihongyu.com/