zoukankan      html  css  js  c++  java
  • 二分查找(折半查找)

    一、概念

    二分查找又称折半查找,优点是比较次数少,查找速度快平均性能好

    其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

    二、执行过程

    折半查找的基本思想为:

    (1)在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;

    (2)若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;

    (3)若给定值大于中间记录的关键码,则在中间记录的右半区继续查找;

    (4)不断重复上述过程,直到查找成功或失败。

    三、伪代码描述

    (1)设置初始查找区间:low=0,high=n-1;

    (2)测试查找区间[low,hig]是否存在,若不存在,则查找失败,否则:(即 low <= high)

    (3)取中间位置mid = (low+high)/2,比较k与r[mid],有以下三种情况:

          (3.1) 若k<r[mid],则high = mid-1;查找在左半区进行,转第二步;

          (3.2) 若k>r[mid],则low = mid+1;查找在右半区进行,转第二步;

          (3.2) 若k=r[mid],则查找成功,返回记录位置mid;

    四、非递归算法

     1 public class BinSearch1 {
     2     public boolean BinSe(int r[],int target){
     3        int low = 0, high = r.length-1;
     4        int mid;
     5        while(low <= high){
     6            mid = (low + high) / 2;
     7            if(target == r[mid])
     8                return true;
     9            else if(target < r[mid])
    10                high = mid-1;
    11            else if(target > r[mid])
    12                low = mid+1;
    13        }
    14        return false;
    15     }
    16     public static void main(String[] args) {
    17         int r[] = {1,2,3,4,5,6,7,8,9,10};
    18         System.out.println(new BinSearch1().BinSe(r,1));
    19     }
    20 }

     五、递归算法

     1 public boolean BinSe2(int r[],int target,int low,int high){
     2         if(low > high)
     3             return false;
     4         else{
     5             int mid = (low+high)/2;
     6             if(target < r[mid])
     7                 return BinSe2(r,target,low,mid-1);
     8             else if(target > r[mid])
     9                 return BinSe2(r,target,mid+1,high);
    10             else 
    11                 return true;
    12         }
    13     }
  • 相关阅读:
    java 代码 添加控件 修改位置 View
    获取整个Activity的layout
    线程加锁 同步
    应用内悬浮按钮 可吸附 展开有动画 mini播放器
    svg 动画
    动画之二:属性动画 Property Animation
    ButterKnife 免去findviewby的麻烦
    ImageView 控件的宽高随图片变化
    python pip使用国内镜像安装第三方库:命令行或PyCharm
    pycharm安装pika提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com>
  • 原文地址:https://www.cnblogs.com/fankongkong/p/6737691.html
Copyright © 2011-2022 走看看