对二分法的理解及组队编程情况
对二分法的理解及组队编程情况
一:对二分法的理解
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:优缺点
优点:大大提高了查找效率,减少了时间复杂度
缺点:只能运用在有序的数组中
二:组队编程情况
我和我的队友都是好学的菜鸟,在学习过程中,由于时间关系,我们选择先独立完成学习任务,再一起探讨解题过程中遇到的问题以及如何解决,这让我学多了一种思路,让我能够更清楚自己代码的不足,不断改进不断进步。