做法是:它先将待查元素x与n/3处的元素比较,然后将x与2n/3处的元素进行比较。比较的结果或者找到x,或者将搜索范围缩小为原来的n/3。请编写c++程序实现算法。数组序列为:1 2 5 7 9 11 (数组存储从下标为0处开始。)
然后按照提示输入:待搜索元素的值。若数组序列中搜索该元素成功,则输出该匹配元素的下标。若搜索失败,输出-1。
样例输入1
7
样例输出1
3
样例输入2
8
样例输出2
-1
#include <iostream>
int func(int* data, int start, int end, int dst)
{
if (start == end){
return -1;
}
//1/3
int index = (end - start) / 3 + start;
if (*(data + index) == dst){
return index;
}
else if(*(data + index) > dst){
return func(data, start, index, dst);
}
else{
start = index + 1;
}
//2/3
index = (end - start) / 2 + start;
if (*(data + index) == dst) {
return index;
}
else if (*(data + index) > dst) {
return func(data, start, index, dst);
}
else {
return func(data, index + 1, end, dst);
}
}
int main()
{
int data[] = {1, 3, 5, 7, 9, 11};
std::cout << func(data, 0, sizeof(data) / sizeof(int), 7) << std::endl;
std::cout << func(data, 0, sizeof(data) / sizeof(int), 3) << std::endl;
std::cout << func(data, 0, sizeof(data) / sizeof(int), 8) << std::endl;
std::cout << func(data, 0, sizeof(data) / sizeof(int), 11) << std::endl;
return 0;
}