对二分法的理解及组队编程情况

对二分法的理解及组队编程情况

一:对二分法的理解

1:关于二分法:二分法是一种典型的查找算法,是必须掌握的查找方法之一;是运用分治策略的典型例子,也称折半查找,其时间复杂度为O(logN),是效率较高的一种查找方法。

2:使用条件:存储在数组中的有序序列。

3:基本思想:(以非降序排序为例)将n个元素分成大致相同的两半,取a[n/2]与x作比较。如果x=a[n/2],则找到x,算法终止;如果a<[n/2],则只在数组a的左半部分继续搜索x;如果x>a[n/2],则只在数组的右半部分继续搜索x。

4:代码实现:

A. 非递归方式:

int BSearch(int a[], int x, int n){

int left = 0; int right = n - 1;

while(left <= right){

        int middle = (left + right ) / 2;

        if(x == a[middle]) return middle;

        if(x > middle) left = middle + 1;

        else right = middle - 1;

}

return -1;

}

B.递归方式:

int BinarySearch(a[], int x, int left ,int right){

if(left < right){

        int middle = (left + right )/2;

        if(x == a[middle])

            return middle;

        else if (x < a[middle])

            return BinarySearch(a, x, 0, middle - 1);

        else

            return BinarySearch(a, x, middle + 1, right);  

}

return -1;

}

5:复杂度分析:

每执行一次循环,待搜索的数组大小减少一半。因此,最坏情况下,循环被执行O(logN)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logN)。

6:优缺点

优点:大大提高了查找效率,减少了时间复杂度

缺点:只能运用在有序的数组中

二:组队编程情况

我和我的队友都是好学的菜鸟,在学习过程中,由于时间关系,我们选择先独立完成学习任务,再一起探讨解题过程中遇到的问题以及如何解决,这让我学多了一种思路,让我能够更清楚自己代码的不足,不断改进不断进步。

猜你喜欢

转载自www.cnblogs.com/sisilovestudy/p/9826399.html