zoukankan      html  css  js  c++  java
  • java

    查找有序数组中数字所在位置。

    二分查找:

    1、每次取中间的数mid,然后和目标target比较,

    1、如果mid < target,对左半区二分查找,

    2、如果mid > target, 对右半区二分查找,

    3、如果mid = target,则说明找到了,返回值。

    递归重复1234直到找到。

        public static int binarySearch(int[] a, int left, int right, int target){
    
            if(left > right){   //当left在right右边,说明全部遍历完了仍然没有找到目标,返回 -1;
                return -1;
            }
            int mid = (left + right)/2;
    
            int re = -1;
            if(target < a[mid]){
                return binarySearch(a, left, mid - 1, target);  //traget比中间的小,说明在左半边
            }
            else if(target > a[mid]){
                return binarySearch(a, mid + 1, right, target); //target比中间的大,说明在右半边
            }
            else{
                return mid;  //说明找到了
            }
        }

    插入查找:

    过程和二分查找一样,只不过采用函数形式确定mid   (防止目标值在数组边缘导致二分法查找次数过多的问题), 预估target离中间值远就把mid调节跨度调大一些,反之就跨度小一点。

        public static int insertSearch(int[] a, int left, int right, int target){
    
            if(left > right || target < a[left] || target > a[right]){   //当left在right右边,说明全部遍历完了仍然没有找到目标,返回 -1;
                return -1;
            }
            //int mid = (left + right)/2;
            int mid = left + (right - left) * (target - a[left]) / ( a[right] - a[left] );
    
            int re = -1;
            if(target < a[mid]){
                return binarySearch(a, left, mid - 1, target);  //traget比中间的小,说明在左半边
            }
            else if(target > a[mid]){
                return binarySearch(a, mid + 1, right, target); //target比中间的大,说明在右半边
            }
            else{
                return mid;  //说明找到了
            }
        }
  • 相关阅读:
    深度解析MVC3中的ModelValidator及相关unobtrusiveJs的验证(一)
    深度解析Asp.net中的验证和Mvc对它的继承
    C# WebBrowser保存页面为图片
    Vue-axios需要注意的几个点
    C# 为什么说事件是一种特殊的委托
    C# event 事件-2
    C# event 事件
    初始Redis与简单使用
    泛型的运用(用于查询数据后DataTable转实体类)
    C# 初识接口 Interface
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11855604.html
Copyright © 2011-2022 走看看