zoukankan      html  css  js  c++  java
  • 二分查找法

    实现思路:

    1、从数组的中间开始寻找,如果中间的数据小于要寻找的目标则从中间往右边寻找,继续是从右边的中间开始。

    2、从数组的中间开始寻找,如果中间的数据大于要寻找的目标则从中间往左边寻找,继续是从左边的中间开始。

    前提:在使用二分查找的时候数组是用先排序好的,递增和递减都可以。

    具体代码如下:

    #include <iostream>
    
    using namespace std;
    
    
    /***********************************************************
     * 非递归实现二分查找
     * @参数
     * @source:要查找的目标数组
     * @low:数组的最小的下标
     * @high:数组的最大的下标
     * @target:要查找的目标
     * *********************************************************/
     int bisect_serach(int *source,int low,int high,int target)
     {
        int mid = 0;
        while(low <= high)
        {
            mid = (low+high)/2;
            if(source[mid]>target)
            {
                high = mid-1;
            }
            else if(source[mid]<target)
            {
                low = mid+1;
            }
            else if(source[mid]==target)
                return mid;
        }
       return -1; //没有找到
     }
    
    
    
     /***********************************************************
      * 递归实现二分查找
      * @参数
      * @source:要查找的目标数组
      * @low:数组的最小的下标
      * @high:数组的最大的下标
      * @target:要查找的目标
      * *********************************************************/
      int bisect_serach_rec(int *source,int low,int high,int target)
      {
         int mid = 0;
         mid = (low+high)/2;
         if (low > high)
             return -1; //没有找到
    
         else if(source[mid]>target)
         {
           bisect_serach_rec(source,low,mid-1,target);
         }
         else if(source[mid]<target)
         {
             bisect_serach_rec(source,mid+1,high,target);
         }
    
         else if(source[mid]==target)
             return mid;
    
      }
    
    
    int main()
    {
       int i = 0;
       int position;
       int *source = new int[10];
       for(i=0;i<10;i++)
           source[i] = i;
    
        position = bisect_serach(source,0,9,22);
        if(position == -1)
        {
          cout<<"not found the data"<<endl;
        }
        cout<<position<<endl;
        delete []source;
        return 0;
    }
  • 相关阅读:
    java中获取服务器的IP和端口
    springboot项目 配置https
    vue+element+upload实现头像上传
    js指定日期时间加一天 ,判断指定时间是否为周末
    在内网中 vue项目添加ECharts图表插件
    vue+element树组件 实现树懒加载
    iview 表格随着更改刷新
    vue设置input不可编辑切换
    .Net程序员学用Oracle系列(3):数据库编程规范
    .Net程序员学用Oracle系列(2):准备测试环境
  • 原文地址:https://www.cnblogs.com/wurenzhong/p/8651085.html
Copyright © 2011-2022 走看看