二分搜索算法的前提是有一个已经排序好的数组
非递归实现
#include <iostream>
using namespace std;
// 二分搜索非递归实现
int BinarySearch(int arr[], int size, int val) {
int first = 0;
int last = size - 1;
while (first <= last) {
int mid = (first + last) / 2;
if (arr[mid] == val) {
return mid;
} else if (arr[mid] > val) {
last = mid - 1;
} else if (arr[mid] < val) {
first = mid + 1;
}
}
return -1;
}
int main() {
int arr[] = {12, 25, 34, 39, 45, 56, 67, 78, 90};
int size = sizeof(arr) / sizeof(arr[0]);
cout << BinarySearch(arr, size, 39) << endl;
cout << "---------" << endl;;
cout << BinarySearch(arr, size, 99);
}
测试
./main
3
---------
-1
递归实现
#include <iostream>
using namespace std;
// 二分搜索递归实现
int BinarySearch(int arr[], int start, int end, int val) {
if (start > end) {
return -1;
}
int mid = (start + end) / 2;
if (arr[mid] == val) {
return mid;
} else if (arr[mid] > val) {
return BinarySearch(arr, start, mid - 1, val);
} else if (arr[mid] < val) {
return BinarySearch(arr, mid + 1, end, val);
}
}
int main() {
int arr[] = {12, 25, 34, 39, 45, 56, 67, 78, 90};
int size = sizeof(arr) / sizeof(arr[0]);
int val1 = BinarySearch(arr, 0, size - 1, 56);
int val2 = BinarySearch(arr, 0, size - 1, 99);
cout << val1 << endl << val2 << endl;
}
测试
./main
5
-1