关于二分法

 

一、对二分法思想的体会

        二分查找可以在有序的支持随机访问的容器中快速查找某个元素的信息,是一个非常成熟、好用的思想。

  它起源于数学中找函数零点的问题,从而也体现数学思想对计算机的深远影响。

  二分法就是每次取区间的中心,判断该处函数值和题目标准值的大小关系,如果函数值偏小,那么在该中心右侧的区间继续查找;如果函数值偏大 ,那么在该中心左侧区间继续查找,直到找到对应的值或者区间缩小到左右端点之间不再包含其他数据结束。当然不同情况下会有不同的做法,但是根本思想还是这样的。

  时间复杂度:O(long N)

  非递归实现

 1 /*非递归二分查找*/
 2 
 3 int BinarySearch(int *array, int size, int target)  
 4 
 5 {  
 6 
 7     if(array==NULL||size==0)
 8 
 9         return -1;
10 
11     int low=0,high=size;
12 
13     int mid=0;
14 
15     while(low<=high){
16 
17         mid=(low+high)/2;
18 
19         if(array[mid]>target)
20 
21             low=mid+1;
22 
23         else if(array[mid]<target)
24 
25             high=mid-1;
26 
27         else
28 
29             return mid;
30 
31     }
32 
33     return -1;
34 
35 }  

 

 

  递归

 1 /*递归二分查询 lg(N)*/
 2 
 3 int BinarySearchRecursive(int *array, int low, int high, int target)  
 4 
 5 {  
 6 
 7     if ( low > high )  
 8 
 9         return -1;  
10 
11     int mid = ( low + high )/2;  
12 
13     if (array[mid] == target )  
14 
15         return mid;  
16 
17     else if ( array[mid] < target )  
18 
19         return BinarySearchRecursive(array, mid+1, high, target);  
20 
21     else  
22 
23         return BinarySearchRecursive(array, low, mid-1, target);  
24 
25 }  

 

 

二、结对编程情况汇报

通过结对编程,两个人一起思考,检查,可以避免一些低级错误,促进思想的碰撞,同时因为队友也要看懂我的代码,提高了代码的可读性,也使思路更加清晰,这是一个合作共赢的过程。

      

 

 

posted @ 2019-10-09 00:19  _KKcoding  阅读(301)  评论(0)    收藏  举报