二分查找法
使用二分查找法(折半查找)在有序数组中是经常用到的。使用此方法前提是数组有序。
递归法
递归法的二分查找法在效率上是比非递归低一点。
#include <iostream>
using namespace std;
//非递归法
int binseaech(int* array, int len, int target)
{
int left = 0, right = len - 1;
int mid;
while (left<=right)
{
mid = (left + right) / 2;
if (target == array[mid])
{
return mid;
}
else if (target > array[mid])
{
left = mid + 1;
}
else if (target < array[mid])
{
right = mid - 1;
}
}
return -1;
}
int main()
{
int array[20] = { 0,1,2,3,4,5,6,7,8,9 };
int ret = binseaech(array, 20, 8);
if (-1 == ret)
{
cout << "目标找不到" << endl;
}
else
{
cout << "目标位置在第:" << ret<<"的位置" << endl;
}
}
非递归法
#include <iostream>
using namespace std;
//递归法
int BinSeaech(int* array, int left, int right, int target)
{
if (left>right)
{
return -1;
}
int mid = (left + right) / 2;
if (target==array[mid])
{
return mid;
}
else if (target > array[mid])
{
return BinSeaech(array, mid + 1, right, target);
}
else
{
return BinSeaech(array, left, mid - 1, target);
}
}
int main()
{
int array[20] = { 0,1,2,3,4,5,6,7,8,9 };
int ret = BinSeaech(array, 0, 9, 8);
if (-1 == ret)
{
cout << "目标找不到" << endl;
}
else
{
cout << "目标位置在第:" << ret<<"的位置" << endl;
}
}