一、对二分法的理解
- 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的左半段中查找;若x大于当前位置值则在数列的右半段中继续查找,直到找到为止。
- 优点:当数据量很大适宜采用该方法,可以提高效率。
- 特点:有序排列,存储在数组中。
- 缺点:如果存储在链表中,则不能采用二分法。
- 时间复杂度:每执行一次算法的while循环,待搜索数组的大小减小一半,在最坏的情况下,while被执行了O(logn)次,最好的情况为x所对应的值在序列的中间位置,while被执行了O(1)次。所以二分法时间复杂度为O(logn)。
- 实现方法:
//1.循环
int BinarySearch(int a[],int left,int right,int x){ while (left<=right){ int middle =(left+right)/2; if (x==a[middle]){ return middle; } if(x>a[middle]){ left=middle+1; } else { right =middle-1; } } return -1; }//2.递归 int binarysearch(int a[], int left, int right, int x) { if (left > right) return -1; int mid = (left + right)/2; if (a[mid]> x) return binarysearch(a, left, mid -1, x); else if (a[mid]< x) return binarysearch(a, mid+1, right, x); else if (a[mid]==x) return mid; }
二、结对编程的感悟
今天在算法课上两个人一起打代码,事实证明有个人看着我打代码真的可以减少很多傻乎乎的Bug,没有思路的时候还可以讨论各自的想法,会让本来很枯燥的打代码变得很有趣。此外,还可以多一点学习别人的代码,学习别人的优点,补充自己的不足之处。希望以后可以和我的拍档相互监督,相互学习,一起进步。