date:2018.3.27
算法图解中的二分查找
缺陷:测试的数组数据是有序的,从小到大排列
python 3.5
def binaery_search(list,item):
low=0
high=len(list)-1
while low <= high:
mid=int((low+high)/2)
guess=list[mid]
if guess == item:
return mid
if guess >item:
high=mid-1
else:
low=mid+1
return None
my_list=[1,3,5,7,9,11]
print(binaery_search(my_list,1))
print(binaery_search(my_list,3))
print(binaery_search(my_list,5))
print(binaery_search(my_list,7))
print(binaery_search(my_list,9))
print(binaery_search(my_list,11))
print(binaery_search(my_list,-1))
结果
c/c++版
#include <iostream>
#include <string>
int binary_search(int *num, int item, int len) {
int low, high;
int guess;
int mid;
low = 0;
high = len-1;
while (low <= high)
{
mid = (low + high)/2;
guess = num[mid];
if (guess == item)
return mid;
if (guess > item)
high = mid-1;
else
low = mid+1;
}
return -1;
}
int main()
{
int len;
using std::cout;
using std::endl;
int num[6] = { 1,3,5,7,9,11 };
len = sizeof(num) / sizeof(*num);
cout << binary_search(num, 1,len) << endl;
cout << binary_search(num, 3,len) << endl;
cout << binary_search(num, 5,len) << endl;
cout << binary_search(num, 7,len) << endl;
cout << binary_search(num, 9,len) << endl;
cout << binary_search(num, 11,len) << endl;
cout << binary_search(num, -1,len) << endl;
return 0;
}
结果