- 二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。
- 二分查找的一个条件是待查询的数组是有序的,我们假设这里的数组是升序的。
- 二分查找的主要思路就是设定两个指针start和end分别指向数组元素的收尾两端,然后比较数组中间结点arry[mid]和待查找元素。如果待查找元素小于中间元素,那么表明带查找元素在数组的前半段,那么将end=mid-1,如果待查找元素大于中间元素,那么表明该元素在数组的后半段,将start=mid+1;如果中间元素等于待查找元素,那么返回mid的值
- int BinarySearchRecursion(int arry[],int &value,int &start,int &end)
- {
- if(start>end)
- return -1;
- int mid=start+(end-start)/2;
- if(arry[mid]==value)
- return mid;
- else if(value<arry[mid])
- {
- end=mid-1;
- return BinarySearchRecursion(arry,value,start,end);
- }
- else
- {
- start=mid+1;
- return BinarySearchRecursion(arry,value,start,end);
- }
- }
- int BinarySearchRecursion(int arry[],int &len,int &value)
- {
- //如果传入的数组为空或者数组长度<=0那么就返回-1。防御性编程
- if(arry==NULL||len<=0)
- return -1;
- int start=0;
- int end=len-1;
- return BinarySearchRecursion(arry,value,start,end);
- }
- void main()
- {
- int arry[]={1,2,3,4,5,6,7,8};
- int len=sizeof(arry)/sizeof(int);
- int especteNum1=4;
- int especteNum2=9;
- int index=BinarySearch(arry,len,especteNum1);
- cout<<"index:"<<index<<endl;
- int index2=BinarySearchRecursion(arry,len,especteNum2);
- cout<<"index2:"<<index2<<endl;
- system("pause");
- }
int BinarySearchRecursion(int arry[],int value,int start,int end)