【发布时间】:2017-06-15 07:16:28
【问题描述】:
我正在实现二进制搜索。该函数在数组中找到目标值时返回其索引,否则返回-1。
我更喜欢处理 i32 而不是 usize 的索引,因为我需要在未找到目标时允许返回 -1 的负数。我明确地在函数的边缘投射,我认为这不是很好。有什么比这更生锈的方法?
fn binary_search(nums: &[i32], target: i32) -> i32 {
let num_size: i32 = nums.len() as i32; // This seems bad
bsearch(nums, target, 0, num_size as usize)
}
fn bsearch(nums: &[i32], target: i32, lo: usize, hi: usize) -> i32 {
if hi < lo {
return -1;
}
let mid_idx = lo + ((hi - lo) / 2);
let guess = nums[mid_idx];
if guess > target {
bsearch(nums, target, lo, mid_idx - 1)
} else if guess < target {
bsearch(nums, target, mid_idx + 1, hi)
} else {
mid_idx as i32 // This seems bad
}
}
【问题讨论】:
-
您也可以查看 standard library implementation of
binary_search以了解一种惯用的 Rust 方式。 -
没想到,谢谢!