目录
二分法思想
二分法也称之为折半法,一般用于数组查找和搜索指定元素,但是只能是在有序数组中才可能实现,非有序数组不能使用!
二分法的核心思想是减治,也就是逐渐缩小包含目标元素的数组范围来解决问题
步骤:
1.以数组中间元素为查找点开始搜索,当目标元素等于中间元素,搜索完成,反之执行下一步
2.当目标元素小于中间元素,在小于中间元素的左分区进行查找;当目标元素大于中间元素,在大于中间元素的右分区进行查找;两者都是重复第一步的步骤。
3.重复上述过程,直至找到目标元素或者数组范围为空为止。
下图演示了在一组数据中使用二分法查找数字12的过程
二分法案例
查找指定数字
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
来源:力扣(LeetCode)
链接:力扣
分析:这题就是上图中的过程,分区查找中点,我们有两中国方式可以解决,一种是采用非递归算法实现,一种是采用递归算法实现
非递归算法:
/**非递归算法实现
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let right = 0;
let left = nums.length-1;
while(right <= left){
let mid = Math.floor((right