无意中看到二分查找几个字眼,就情不自禁的构思它的实现代码,特此写下来当是练手
一:在此有两种方法的实现,一种是递归的另一种是非递归的,代码如下:
注:此处假定数组中的元素是按升序排序的,可以稍加修改适应升序和降序
#include <iostream>
using namespace std;
// recursion
int m_binarySearch(int arr[], int left, int right, int num){
// 为了防止误把负值传给数组下标变量,因此加上了判断:left >= 0
if(right >= left && left >= 0){
int middle = (left+right)/2;
if(arr[middle] == num)
return middle;
if(arr[middle] < num){
return m_binarySearch(arr, middle+1, right, num);
}
else{
return m_binarySearch(arr, left, middle-1, num);
}
}
else{
return -1;
}
}
// non-recursion
int binarySearch(int arr[], int left, int right, int num){
while(right >= left && left >= 0){
int middle = (left+right)>>1;
if(arr[middle] == num){
return middle;
}
else if(arr[middle] < num){
left = middle+1;
continue;
}
else{
right = middle-1;
continue;
}
}
return -1;
}
int main(int argc, char* argv[])
{
int retV;
int testArr[] = {2, 5, 6, 8, 12, 15, 34, 56, 102, 343};
int len = sizeof(testArr)/sizeof(int);
retV = m_binarySearch(testArr, 0, len-1, 15);
cout << retV << endl;
retV = binarySearch(testArr, 0, len-1, 14);
cout << retV << endl;
return 0;
}
多多写代码,好处大大滴