原理

image.png

实现

递归实现

  1. private static int binarySearch2(int[] arr,int begin,int end, int r){
  2. if(arr.length<=0 || begin==end) {
  3. return -1;
  4. }
  5. //避免整数溢出
  6. int mid = begin + ((end-begin)>>1);
  7. if(r== arr[mid]){ return mid; }
  8. if(r> arr[mid]){
  9. return binarySearch2(arr,mid+1, end,r);
  10. }else{
  11. return binarySearch2(arr,begin,mid-1,r);
  12. }
  13. }

循环实现

  1. private static int binarySearch3(int[] arr, int r){
  2. if(arr == null || arr.length<=0) {
  3. return -1;
  4. }
  5. int begin = 0;
  6. int end = arr.length;
  7. while (end>begin){
  8. int mid = begin + ((end-begin)>>1);
  9. if(arr[mid] ==r){
  10. return mid;
  11. }
  12. if(arr[mid] > r){
  13. end = mid-1;
  14. }else{
  15. begin = mid+1;
  16. }
  17. }
  18. return -1;

存在的问题

当存在多个重复值时,查询的结果返回不稳定