常见错误:

  • 死循环:循环体外的初始化条件,与循环体内的迭代步骤, 都必须遵守一致的区间规则,也就是说,如果循环体初始化时,是以左闭右开区间为边界的,那么循环体内部的迭代也应该如此.如果两者不一致,会造成程序的错误.
  • 溢出:middle = left + (right - left) / 2
  • 终止条件:一般来说,如果左闭右闭,则left<=right; 如果一开一闭,则left<right; 关键看left能不能等于right,而且要考虑实际情况,有时不能这样简单终结,会出现死循环,如下面的binarySearch_better()。
running time analysis:T(n) = T(n/2) +  Θ(1) ---> T(n) = Θ(lgn)
 
正确算法:
 1 //normal binarySearch without optimization, closed interval, return value is mid(maybe mid=left=right)
 2 int binarySearch(int a[], int n, int k){
 3     if(n<1) return -1;
 4 
 5     int left,right,mid;
 6     left = 0;       //closed left
 7     right = n-1;    //closed right
 8 
 9     while( left<=right ){
10         mid = left+(right-left)/2;
11 
12         if( a[mid]<k )  left = mid+1;
13         else if( a[mid]>k ) right = mid-1;
14         else return mid;
15     }
16     return -1;
17 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-29
  • 2021-10-01
  • 2021-10-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-04
  • 2021-06-03
  • 2022-12-23
  • 2021-08-29
  • 2022-12-23
  • 2021-05-17
相关资源
相似解决方案