查找算法(二分查找)
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 } } } }
我们唯一能够控制的是自己的脾气和努力