1 递归的是神,迭代的是人
-- 迭代的折半查找
-- 递归的折半查找
2 见案例(zhebanchazhao1.cpp)
/**
* 本案例演示递归的折半查找与迭代的折半查找
*
*/
#include <iostream>
using namespace std;
// 递归的折半查找 arg1:需要查找的数组 arg2:需要查找的数组中的元素 arg3 arg4:需要查找数组的两边下角标 如果10个数,则left=0 right = 9
int BinarySearch_I(int* a, const int x, const int left, const int right);
// 迭代的折半查找
int BinarySearch_R(int* a, const int x, const int n);
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result = BinarySearch_R(a, 7, 10);
if(result == -1)
cout << "该元素不在数组内" << endl;
else
cout << "数组中的元素位于a[" << result << "]中" << endl;
int result2 = BinarySearch_I(a, 6, 0, 9);
if(result2 == -1)
cout << "该元素不在数组内" << endl;
else
cout << "数组中的元素位于a[" << result2 << "]中" << endl;
return 0;
}
// 迭代的折半查找
int BinarySearch_R(int* a, const int x, const int n)
{
int left = 0, right = n - 1, middle;
while(left <= right) // 一直二分查找,如果找到,则返回元素所在数组下表
{
middle = (left + right) / 2;
if(x == a[middle])
return middle;
else if(x > a[middle])
left = middle + 1;
else if(x < a[middle])
right = middle - 1;
}
return -1; // 如果while循环中没有找到,则返回-1
}
// 递归的折半查找
int BinarySearch_I(int* a, const int x, const int left, const int right)
{
while(left <= right)
{
int middle = (left + right) / 2; //折半
if(x < a[middle])
return BinarySearch_I(a, x, left, middle -1);
else if(x > a[middle])
return BinarySearch_I(a, x, middle + 1, right);
else
return middle;
}
return -1;
}