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     }
  • 相关阅读:
    燕之屋燕窝被指97%为糖水和增稠剂 营养价值不如鸡蛋
    烧烤需要准备些什么东西?烧烤步骤
    烧烤材料清单都有什么?
    西雅图华人码农生存实录
    【读书】李建:《读书的“有用”与“无用”》
    孩子,我为什么要求你读书
    读书和不读书差别在哪里?
    招人不是HR第一职责,留住人才是
    select 可输入的下拉框
    toLocaleString 日期
  • 原文地址:https://www.cnblogs.com/fankongkong/p/6737691.html
Copyright © 2011-2022 走看看