#include<bits/stdc++.h>
using namespace std;
int temp1 = 0; //用于判断是否已经找到 1-找到
void three_find_x(int a[], int left, int right, int x) { //三分查找,位序
int mid_left = left + (right - left) / 3;
int mid_right = right - (right - left) / 3;
//先判是否相等,当mid_left==mid_right时,若不等,则此处无法结束,下一个if直接结束,避免多调用一次函数
if (x == a[mid_left]) {
temp1 = 1;
cout << mid_left << endl;
return;
}
if (mid_left >= mid_right) {
return;
}
if (x < a[mid_left]) {
three_find_x(a, left, mid_left - 1, x);
}
if (x > a[mid_left]) {
if (x == a[mid_right]) {
temp1 = 1;
cout << mid_right << endl;
return;
}
if (x > a[mid_right]) {
three_find_x(a, mid_right + 1, right, x);
}
if (x < a[mid_right]) {
three_find_x(a, mid_left + 1, mid_right - 1, x);
}
}
}
int main() {
int N;
cin >> N;
int a[10000] = {};
int i, j, temp;
for (i = 1; i <= N; i++) {
cin >> a[i];
}
int x;
cin >> x;
three_find_x(a, 1, N, x);
if (temp1 == 0) {
cout << -1 << endl;
}
return 0;
}
测试结果: