函数模板分别用递归和迭代实现对数组元素的二分查找
前言
所谓能用递归实现的肯定能够用迭代实现,害,这不就试试嚒,以后应该会实现不少用递归和迭代都实现的算法。
递归
实现
#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

浙公网安备 33010602011771号