二分搜索 | ||
---|---|---|
Time Limit: 1000 MS | Memory Limit: 1000 KB |
Description
给定一递增有序数组a[0,1,...,n-1], 请在数组中搜索给定元素. 搜索过程中请使用mid=(low+high)/2.
Input
第一行输入M表示包含M组测试数据,每组输入N和X, N (1000<=N<=20000) 表示后面有N个整数递增有序数组, 表示将搜索的元素.
Output
搜索成功输出success及父亲, 否则输出not found及父亲.
Sample Input
2
7 10 1 3 5 7 9 11 13
7 10 2 4 6 8 10 12 14
Sample Output
not found, father is 9
success, father is 12
*请注意逗号后加空格
#include <iostream>
using namespace std;
void halfsort(int *a, int begin,int end,int x, int father);
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int n, x;
cin >> n; //n是数组中的数字个数
cin >> x; //x是要查找的数字
int* a = new int[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int mid = (n - 1) / 2;
halfsort(a, 0, n - 1, x, a[mid]);
cout << endl;
}
}
void halfsort(int* a, int begin, int end,int x,int father) {
int mid = (begin + end) / 2;
if (begin > end) { cout << "not found, father is " << father; return; } //递归终止条件
else if (a[mid] == x) {
cout << "success, father is " << father; return; //递归终止条件
}
else if (a[mid] < x) { halfsort(a, mid + 1, end, x, a[mid]); } //如果中间值小于要找的数,则在右侧再次搜索
else if (a[mid] > x) { halfsort(a, begin, mid - 1, x, a[mid]); } //如果中间值大于要找的数,则在左侧再次搜索
};