2写一个三分检索程序,首先检查n/3的元素是否等于某个x的值,然后检查2n/3处的元素,这样,或者找到或者把集合缩小到原来的1/3.找到输出元素下标,否则输出-1
时间: 2024-02-27 10:59:05 浏览: 51
以下是一个简单的C++实现:
```c++
#include <iostream>
using namespace std;
int ternarySearch(int arr[], int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid1 = left + (right - left) / 3;
int mid2 = right - (right - left) / 3;
if (arr[mid1] == x) return mid1;
if (arr[mid2] == x) return mid2;
if (x < arr[mid1]) right = mid1 - 1;
else if (x > arr[mid2]) left = mid2 + 1;
else {
left = mid1 + 1;
right = mid2 - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 4;
int index = ternarySearch(arr, n, x);
if (index != -1) cout << "Element found at index " << index << endl;
else cout << "Element not found" << endl;
return 0;
}
```
首先定义左右指针 `left` 和 `right`,指向数组的两端。在每一次循环中,计算两个中间位置 `mid1` 和 `mid2`,然后分别检查这两个位置的元素是否等于 `x`。如果找到了,直接返回该位置;如果 `x` 小于 `arr[mid1]`,则在左半边继续查找;如果 `x` 大于 `arr[mid2]`,则在右半边继续查找;否则,在中间一段继续查找。如果最后还没有找到,返回 `-1`。
阅读全文