首页 > 试题广场 >

对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,

[问答题]
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的 算法 ,在数组中查找指定元素。
//Java.
public class Solution{
  //if not found, return -1;
   public int binary_search(int[] array, int n){
      if (array == null || array.length < 1)
          return -1; //不需要寻找.
      int top = 0, button = array.length - 1;
      while (top <= button){
          int mid = top + (button - top) / 2;
          if (n < array[mid]){ //n在数组左边.
              button = mid - 1;
           }else if (n > array[mid]){ //n在数组右边.
              top = mid + 1;
           }else {
               return mid; //find. 
           }
      }
  }
}

编辑于 2017-01-05 18:53:40 回复(0)
更多回答
private static int MyBinarySearch(int[] arr , int key){
        //先创建两个索引值,前边的索引和后边的索引,来 规定查找的界限   
        int before = 0;
        int back = arr.length-1;
      
        while(back >before){
                       //创建一个中间值索引
            int mid = (back+before)/2;
            if(arr[mid] > key){
                back = mid-1;
            }else if(arr[mid] < key){
                before = mid+1;
            }else{
                return mid;
            }
        }
        return back;

    } 

发表于 2018-01-11 23:43:54 回复(0)
defbinarySearch(array, left, right, target):
    middle =(left +right)/2
    ifarray[middle] ==target:
        returnmiddle
    elifarray[middle]>target:
        returnbinarySearch(array, left, middle-1, target)
    elifarray[middle]<target:
        returnbinarySearch(array, middle+1, right, target)

发表于 2017-02-06 20:40:35 回复(0)
int binary_search(int* a, int len, int goal) { int low = 0; int high = len -1; while (low <= high) { int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出 if (a[middle] == goal) return middle; //在左半边 else if (a[middle] > goal) high = middle - 1; //在右半边 else low = middle + 1; } //没找到 return -1; }
发表于 2017-01-05 09:56:50 回复(0)