我想使用二进制搜索来查找元素应该放在的数组索引。这是为了在向下移动较大元素的同时将元素插入到数组中。如何修改这个二进制搜索以指定应该放置未找到元素的位置?
int binarySearch(int arr[], int x) {
int low = 0;
int mid = 0;
int high = arr.length - 1;
while (low <= high) {
mid = (low + high) / 2;
if (x < arr[mid]) {
high = mid - 1;
} else if (x > arr[mid]) {
low = mid + 1;
} else {
return mid;
}
}
//This is what im trying to get to work
if (x < arr[mid]) {
return high;
} else {
return low;
}
}
感谢。
答案 0 :(得分:4)
Arrays.binarySearch()返回-(insertion_point + 1)
。这样,返回值≥0是命中并且返回值<1。 0是未命中,insertion_point = -return_value - 1
。
答案 1 :(得分:2)
看看java.util.Arrays.binarySearch()是如何做到的。
答案 2 :(得分:0)
查看C ++标准模板库中的lower_bound和upper_bound。这些链接符合规范;这些实现位于同一网站的实现部分的stl_algo.h文件中,但我是新用户,因此不允许一次发布两个以上的URL。