二分查找法



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

  43. int BinarySearchRecursion(int arry[],int value,int start,int end)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值