java - 二进制搜索,返回应该插入值的索引
问题描述
除了普通函数之外,我还需要进行二进制搜索,当找不到该值时,它会返回我必须在其中插入新元素进行排序的索引。在下面的代码中,第二个 for 用于搜索要交换元素的索引。我需要做一个用二进制搜索替换它的函数。这种方法会是什么样子?
void insertion (int n, int v[])
{
for (int j = 1; j < n; ++j) {
int x = v[j];
int i;
// this for searches where the value should be inserted
for (i = j-1; i >= 0 && v[i] > x; --i)
v[i+1] = v[i];
v[i+1] = x;
}
}
我知道正常的二进制搜索是这样的。我需要改变什么?
static int BinarySearchR (int [] array, int l, int r, int key) {
int mid = ((r - l) / 2) + l;
if (array[mid] == key) return mid;
else if (array[mid] > key) return BinarySearchR(array, l, mid- 1, key);
else if(array[mid] < key) return BinarySearchR(array, mid + 1, r, key);
return -1;
}
解决方案
经过一些调整,它起作用了:
public static int BuscaBinariaI(int [] arr, int l, int r, int n) {
int mid = 0;
while(l < r){
mid = l + (r - l)/2;
if(arr[mid] == n) {
return -1;
}
else if(arr[mid] > n){
r = mid - 1;
BuscaBinariaI( arr, l, r, n);
}
else {
l = mid + 1;
BuscaBinariaI( arr, l, r, n);
}
}
if (mid>=arr.length) return arr.length;
else if(arr[mid] > n) return mid ;
else return mid + 1;
}
推荐阅读
- azure-devops - 如何将 Outlook 连接到 DevOps?
- python - 在 PyTorch 中计算 4D 张量的最大值和最小值
- javascript - 如何从javascript中的树数据结构制作数组数组?
- python - 让 Spyder 为整个界面使用深色主题
- ios - iOS UITableView 出现两次
- css - 为什么不在 CSS 中定位按钮标签而不是类?
- qt - Qt OpenGL 从 5.10.0 升级到 5.12.1 遇到的问题
- javascript - AG Grid 中未设置多个复选框
- powershell - 使用 powershell 获取 Skype for Business 联系人状态
- java - 如何在循环中处理 CompletableFuture 线程