二分查找的主体实现如下:
int search(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = (left + right) / 2;
if (key == arr[mid]) {
return mid;
}
if (key > arr[mid]) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
全部代码如下:
#include <iostream>
#include <algorithm>
int search(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = (left + right) / 2;
if (key == arr[mid]) {
return mid;
}
if (key > arr[mid]) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
int main() {
// 定义参数
int number_arr[] = { 3, 2, 5, 8, 4, 1, 9 }; // 创建数组并初始化
std::sort(number_arr, number_arr + sizeof(number_arr) / sizeof(number_arr[0])); // 对数组进行排序;1 2 3 4 5 8 9
int start = 0; // 左指针
int end = sizeof(number_arr) / sizeof(number_arr[0]) - 1; // 右指针
int search_key = 5; // 要查询的值
// 调用二分查找函数
int res = search(number_arr, start, end, search_key);
std::cout << res << std::endl; // 输出4
return 0;
}