注意:二分查找的数组一定要是有序单调的
Python:
binary_search函数的作用是返回目标元素item的下标,若找不到则return None
def binary_search(list, item):
low = 0
high = len(list) - 1
while low<=high:
mid = (low+high)//2
guess = list[mid]
if guess == item:
return mid
elif guess<item:
low = mid + 1
else:
high = mid - 1
return None
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3)) # => 1
print(binary_search(my_list, -1) # => None
C++:
//二分搜索
#include <iostream>
using namespace std;
int binary_search(int* arr, int item,int len)
{
int left = 0;
int right = len - 1;
int mid,guess;
while (left <= right) //这里一定是<=,如果只是<就错了
{
mid = (left + right) / 2;
guess = arr[mid];
if (guess == item)
{
return mid;
}
else if (guess < item)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return -1; //跳出循环前还没执行return mid那就是搜索失败了,返回-1;
}
int main()
{
int arr[5] = { 1,3,5,7,9 };
int len = 5;
cout << binary_search(arr, 9, 5) << endl; //输出9的下标:4
return 0;
}