编写函数 int search2( int a [], int n , int x )折半查找一维有序数组(有 n 个元素)中是否有元素 x ,返回该元素第一次出现的数组下标,否则返回﹣1
时间: 2023-05-19 22:02:19 浏览: 109
好的,这是一个关于折半查找的问题。下面是函数 int search2 的完整代码:
```c++
int search2(int a[], int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) {
while (mid > 0 && a[mid - 1] == x) {
mid--;
}
return mid;
} else if (a[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
这个函数使用了折半查找算法,在一个有序数组中查找元素 x。如果找到了,就返回该元素第一次出现的数组下标;否则返回 -1。
相关问题
编写函数int BinSearch(int a[],int n,int x),功能为在一维整数数组a中(数据递增存储,从下标0开始,数组大小为n),以折半查找的思想查找整数x,找到返回下标,否则返回-1. 并在main函数中进行调用测试.
好的,以下是函数的代码实现:
```
int BinSearch(int a[], int n, int x) {
int l = 0, r = n - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] == x) {
return mid;
} else if (a[mid] > x) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return -1;
}
```
在 main 函数中测试:
```
#include <stdio.h>
int BinSearch(int a[], int n, int x);
int main() {
int a[] = {1, 3, 5, 7, 9, 11, 13, 15};
int n = sizeof(a) / sizeof(int);
int x = 7;
int index = BinSearch(a, n, x);
if (index == -1) {
printf("未找到 %d\n", x);
} else {
printf("找到 %d,下标为 %d\n", x, index);
}
return 0;
}
```
输出结果为:
```
找到 7,下标为 3
```
2.编写函数( BinSearch(int a[],int n,int x),功能为在一维整数数组a中(数据递减存储,从下标0开始,数组大小为n),以折半查找的思想查找某个整数x,找到返回下标,否则返回-1 并在main函数中进行调用测试。
好的,这是一个折半查找函数的实现,以下是代码:
```c++
int BinSearch(int a[], int n, int x) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) {
return mid;
} else if (a[mid] < x) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
int main() {
int a[] = {10, 8, 6, 4, 2};
int n = 5;
int x = 6;
int index = BinSearch(a, n, x);
if (index != -1) {
cout << "找到了,下标为: " << index << endl;
} else {
cout << "没找到!" << endl;
}
return 0;
}
```
这段代码中,我们首先定义了 `BinSearch` 函数,它接收三个参数:
- `a[]`:表示要查找的数组;
- `n`:表示数组的大小;
- `x`:表示要查找的元素。
然后,我们使用折半查找的思想,在 `while` 循环中进行查找,如果找到了,就返回元素的下标,如果没找到,就返回 `-1`。
在 `main` 函数中,我们定义了一个数组 `a`,大小为 `5`,然后我们调用 `BinSearch` 函数查找元素 `6`,最后根据返回值判断是否找到了元素。
阅读全文