二分法查找有序数组的Ruby实现

161 阅读1分钟

二分法查找有序数组的Ruby实现

# (版本一)左闭右闭区间
def search(nums, target)
  left = 0
  right = nums.length - 1
  while left <= right
    middle = (left + right) / 2
    if nums[middle] > target
      right = middle - 1
    elsif nums[middle] < target
      left = middle + 1
    else
      return middle
    end
  end
  -1
end

# (版本二)左闭右开区间
def search(nums, target)
  left = 0
  right = nums.length
  while left < right
    middle = (left + right) / 2
    if nums[middle] > target
      right = middle
    elsif nums[middle] < target
      left = middle + 1
    else
      return middle
    end
  end
  -1
end

开闭区间的不同决定了判断条件的不同,但在执行效率上并没有本质上的变化。