实现思想:
给定一组已经排序的数组 从数组中间的元素开始和要查找的元素进行比较
如果中间元素大于要查找的元素的话 把查找范围缩小为中间元素的左半部分(目标元素属于这个范围)
如果中间元素小于要查找的元素的话 把查找范围缩小为中间元素的右半部分(目标元素属于这个范围)
递归的实现:
#include<iostream>
#include<stdlib.h>
using namespace std;
int TestArray[1000];
int findElement(int array[], int S, int N, int X) { //N表示数组大小
if (S > N) //如果S == N的话 该下标的元素要么就是结果 要么要查找的元素不存在
{
cout << "没有找到元素!!" << endl;
return -1;
}
int mid = (S + N) / 2;
if (array[mid] == X)
return array[mid]; //得到结果 进行返回
else if (array[mid] > X)
findElement(array, 0, mid, X); //从左半部分开始查找
else if (array[mid] < X)
findElement(array, mid+1, N, X); //从右半部分开始查找
}
void main() {
for (int i = 0; i < 1000; ++i) {
TestArray[i] = i;
}
int size = sizeof(TestArray) / sizeof(int);
int calResult = findElement(TestArray, 0, size-1, 999);
cout << calResult << endl;
system("PAUSE");
return;
}