c语言用折半查找,想通过它找到某个数第一次出现的位置,因为这个数可能出现很多次.普通的折半查找会找错。
时间: 2024-11-24 22:40:28 浏览: 29
在C语言中,如果你想通过折半查找(也称二分查找)寻找一个数首次出现的位置,而不是最后一次,确实需要对标准的二分查找算法做一些修改。普通二分查找假设目标元素只会出现一次,如果目标元素多次出现,它只会返回某一次出现的位置。为了找到首次出现的位置,你需要做以下调整:
1. **搜索范围**:在每次比较后,不仅检查中间元素是否为目标值,还要检查中间元素之前的所有元素,直到找到第一个等于目标值的元素。这通常涉及到维护两个指针,一个指向中间元素,另一个指向前一个未找到目标值的位置。
2. **记录索引**:从数组的一端开始,将每个遇到的第一个目标值的索引存储起来,以便后续遍历。
3. **结束条件**:当找到目标值并更新了索引后,继续检查右侧的元素,直到当前区间右侧不再包含目标值为止。
下面是一个简单的伪代码示例:
```
int binary_search_first_occurrence(int arr[], int target, int left, int right) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
// 如果这里是第一个匹配项,直接返回
if (mid == 0 || arr[mid - 1] != target)
return mid;
// 否则,向左搜索,寻找第一个匹配项
right = mid - 1;
} else if (arr[mid] < target) {
left = mid + 1; // 目标在右半部分
} else {
right = mid - 1; // 目标在左半部分
}
}
return -1; // 没有找到
}
阅读全文
相关推荐










