查找算法(二分查找)

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
      }
    }
  }

}

 

posted @ 2019-07-18 23:05  小杨【0和1】  阅读(306)  评论(0编辑  收藏  举报