查找算法(二分查找)

Posted itall

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找算法(二分查找)相关的知识,希望对你有一定的参考价值。

1.二分查找介绍

#描述二分查找:
    二分查找针对有序的数据集合,要从有序集合中,找出目标值。每次都把目标值,与区间的中间元素进行对比,将待查找的区间缩小为之前的一半,直到查到要查找的目标元素。或者区间缩小为0.
    
#二分查找实现注意事项:
    1.循环退出条件
        low<=high
        
    2.mid取值
        普通方式:mid=(low+high)/2
        改进方式:mid=low+(high-low)/2
        终极方式:mid=low+((high-low)>>1)
        
    3.low和high更新
        low=mid+1
        high=mid-1
        
 #二分查找应用场景局限性:
     1.二分查找依赖顺序表结构(数组)
     2.二分查找针对的是有序数据
     3.数据量太小,不适合使用二分查找

 

2.代码实现

package cn.anan.util

/**
  * 学习二分查找
  */
object BinarySearch 

  def main(args: Array[String]): Unit = 
    // 定义数组,该数组是有序排列
    val arr = Array(0,1,2,3,4,5,6,7,8,9,10)

    // 定义目标数字:7
    val goal=7

    // 查找目标数字在数组中的索引位置
    // 定义开始查找位置,结束位置,折半位置索引
    var start=0
    var end=arr.length-1
    var mid=0

    // 循环处理
    while(start<=end)
      // 计算中间位置
      mid=(start+end)/2

      // 进行比较
      if(goal==arr(mid))
        println("目标数字goal:"+goal+"在数组中的索引位置:"+mid)
        return
      

      // 如果目标数字小于,数组中间位置的数字
      if(goal<arr(mid))
        // 结束位置等于mid-1
        end=mid-1
      

      // 如果目标数字大于,数组中间位置数字
      if(goal>arr(mid))
        // 开始位置等于mid+1
        start=mid+1
      
    
  

 

以上是关于查找算法(二分查找)的主要内容,如果未能解决你的问题,请参考以下文章

聊聊算法——二分查找算法深度分析

Go-二分查找算法

算法_001_二分查找算法

每周算法小知识之二分查找

算法算法 二分查找 二分查找 查找多个相同的值

二分查找算法