函数模板分别用递归和迭代实现对数组元素的二分查找

前言

所谓能用递归实现的肯定能够用迭代实现,害,这不就试试嚒,以后应该会实现不少用递归和迭代都实现的算法。

递归

实现

#include<iostream>
using namespace std;

template<class T>
int BinarySearch(T a[], int low, int high, T key) {
	if (low > high)
		return -1;
	else {
		int mid = (low + high) / 2;
		if (a[mid] == key)
			return mid;
		else if (a[mid] > key)
			return BinarySearch(a, low, mid - 1, key);
		else
			return BinarySearch(a, mid + 1, high, key);
	}
}

测试

int main() {
	int a[] = { 2, 3, 5, 8, 13, 16, 20 };
	int pos = BinarySearch<int>(a, 0, 6, 10);
	cout << pos << endl;
	pos = BinarySearch<int>(a, 0, 6, 16);
	cout << pos << endl;
	return 0;
}

输出

-1
5

迭代

实现

#include<iostream>
using namespace std;

template<class T>
int BinarySearch(T a[], int low, int high, T key) {
	int mid;
	while (low < high) {
		mid = (low + high) / 2;
		if (a[mid] == key)
			return mid;
		else if (a[mid] < key)
			low = mid + 1;
		else
			high = mid - 1;
	}
	return -1;
}

测试

int main() {
	int a[] = { 2, 3, 5, 8, 13, 16, 20 };
	int pos = BinarySearch<int>(a, 0, 6, 10);
	cout << pos << endl;
	pos = BinarySearch<int>(a, 0, 6, 16);
	cout << pos << endl;
	return 0;
}

输出

-1
5
posted @ 2020-04-12 16:57  游芒。  阅读(235)  评论(0)    收藏  举报