二分法查找有序数组的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
开闭区间的不同决定了判断条件的不同,但在执行效率上并没有本质上的变化。