修改折半查找算法使之能够进行范围查找的代码
时间: 2024-05-05 15:16:23 浏览: 93
基于java的折半查找算法.zip
以下是修改后的折半查找算法,支持范围查找:
```
int binarySearch(int arr[], int low, int high, int target) {
if (low > high) {
return -1;
}
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
return binarySearch(arr, low, mid - 1, target);
} else {
return binarySearch(arr, mid + 1, high, target);
}
}
int rangeSearch(int arr[], int n, int low, int high) {
int lowIndex = binarySearch(arr, 0, n - 1, low);
if (lowIndex == -1) {
return 0;
}
int highIndex = binarySearch(arr, 0, n - 1, high);
if (highIndex == -1) {
highIndex = n - 1;
}
while (arr[lowIndex] < low) {
lowIndex++;
if (lowIndex > highIndex) {
return 0;
}
}
while (arr[highIndex] > high) {
highIndex--;
if (highIndex < lowIndex) {
return 0;
}
}
return highIndex - lowIndex + 1;
}
```
该算法中,`lowIndex` 表示第一个大于等于 `low` 的元素的下标,`highIndex` 表示第一个小于等于 `high` 的元素的下标。首先利用折半查找算法找到 `low` 和 `high` 在数组中的位置,然后利用双指针法找到范围内的元素个数。如果 `low` 比数组中最小的元素还小,或者 `high` 比数组中最大的元素还大,则返回 0。
阅读全文