二分法的两种写法

1.循环写法

public static int rank(int key,int nums[])
{
    //查找范围的上下界
    int low=0;
    int high=nums.length-1;
    //未查找到的返回值
    int notFind=-1;
    while(low<=high)
    {
        //二分中点=数组左边界+(右边界-左边界)/2
        //整数类型默认取下整
        int mid=low+(high-low)/2;
        //中间值是如果大于key
        if(nums[mid]>key)
        {
            //证明key在[low,mid-1]这个区间
            //因为num[mid]已经判断过了所以下界要减一
            high=mid-1;
        }else if(nums[mid]         {
            //证明key在[mid+1,high]这个区间
            //同样判断过mid对应的值要从mid+1往后判断
            low=mid+1;
        }
        else
        {
            //查找成功
            return mid;
        }
    }
    //未成功
    return notFind;
}

2.递归写法

 
  1. public static int search1(int num,int low,int high,int a[]) {

  2. int middle = (high+low) / 2;

  3. while(low<=high){

  4. //注意等号要有

  5. if(a[middle]>num){

  6. return search1(num, low, middle-1, a);

  7. }else if(a[middle]

  8. return search1(num, middle+1, high, a);

  9. }

  10. else{

  11. return middle;

  12. }

  13. }

  14. return-1;

  15. }

你可能感兴趣的:(二分法的两种写法)