二分查找法的递归实现

实现思想:

给定一组已经排序的数组 从数组中间的元素开始和要查找的元素进行比较

如果中间元素大于要查找的元素的话 把查找范围缩小为中间元素的左半部分(目标元素属于这个范围)

如果中间元素小于要查找的元素的话 把查找范围缩小为中间元素的右半部分(目标元素属于这个范围)


递归的实现:

#include
#include
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;
}



你可能感兴趣的:(数据结构与算法)