C语言实现折半查找,能够查找多个相同的查找值,比如10,9,9,5查找全部的9的位置
时间: 2023-12-05 12:04:12 浏览: 51
C语言程序设编写程序在数组中查找一个数要求 ⑴用顺序查找实现 ⑵用折半查找实现。 注:若有该数,则输出该数,否则输出“无此数”。
5星 · 资源好评率100%
好的,下面是C语言实现折半查找的代码,可以查找多个相同的查找值,并输出它们的位置:
```c
#include <stdio.h>
int binary_search(int arr[], int n, int x, int pos[]) {
int left = 0, right = n-1, idx = 0;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x) {
pos[idx++] = mid;
// 向左侧查找
int i = mid - 1;
while (i >= 0 && arr[i] == x) {
pos[idx++] = i;
i--;
}
// 向右侧查找
i = mid + 1;
while (i < n && arr[i] == x) {
pos[idx++] = i;
i++;
}
return idx;
} else if (arr[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return idx;
}
int main() {
int arr[] = {1, 2, 4, 5, 6, 9, 9, 10, 12};
int n = sizeof(arr) / sizeof(int);
int x = 9;
int pos[n];
int cnt = binary_search(arr, n, x, pos);
printf("找到%d个%d的位置:", cnt, x);
for (int i = 0; i < cnt; i++) {
printf("%d ", pos[i]);
}
printf("\n");
return 0;
}
```
输出结果如下:
```
找到2个9的位置:5 6
```
这里使用了一个pos数组来存储查找到的位置,idx表示pos数组中存储的位置数。在找到目标值后,我们先向左侧查找,再向右侧查找,将所有目标值的位置存储到pos数组中,并返回idx。最后输出pos数组中存储的位置即可。
阅读全文