二分搜索 : 非递归实现
要求:有序序列
#include<iostream>
using namespace std;
//二分搜索非递归实现
int binarySearch(int arr[], int size, int val)
{
int first = 0, last = size - 1;
while (first <= last)
{
int middle = (first + last) / 2;
if (arr[middle] == val) {
return middle;
}
else if (arr[middle] > val) {
last = middle - 1;
}
else {
first = middle + 1;
}
}
return -1;
}
int main()
{
int arr[] = { 12,34,45,65,76,78 };
int len = sizeof(arr) / sizeof(int);
cout << binarySearch(arr, len, 34) << endl;
cout << binarySearch(arr, len, 45) << endl;
cout << binarySearch(arr, len, 76) << endl;
cout << binarySearch(arr, len, 78) << endl;
return 0;
}
二分搜索:递归实现
(1)、不管问题是什么规模,求解问题的方式都是一样的
(2)、不同规模的数据,其计算结果是有关系可循的
(3)、必须给出递归结束的条件
#include<iostream>
using namespace std;
//二分搜索非递归实现
bool binarySearch(int arr[], int i,int j, int val)
{
if (i > j)
{
return -1;
}
int mid = (i + j) / 2;
if (arr[mid] == val)
{
return mid;
}
else if (arr[mid] > val)
{
return binarySearch(arr, i, mid - 1, val);
}
else
{
return binarySearch(arr, mid + 1, j, val);
}
}
int main()
{
int arr[6] = { 12,34,45,65,76,78 };
int len = sizeof(arr) / sizeof(int);
cout << binarySearch(arr, 0, 6, 34) << endl;
return 0;
}