先给大家贴个题,热乎的,最新的阿里2014实习生笔试题(2014.3.29)。

很经典的二分查找,找出其中的bug。
题目让指出bug,我想应该是具体的说明错在哪,怎么错了。
应该是有两处bug:
1) while 循环处条件有错,如果只有一个元素,则返回的肯定的-1,导致答案错误。应改为 end >= start
2) 程序会进入死循环。考虑 start =1, end= 2. 假设 middle = 1. 若每次都执行 start=midlle, 即进入死循环。应改为 start = middle+1; end = middle-1;
另外,本题没有说已排序的数组是递增还是递减的。我在答题时又考虑了递减的情况,不算多余吧。
顺便给下完整的代码:
03 | int binarySearch( int arr[], int l, int r, int x) |
09 | if (arr[m] == x) return m; |
11 | if (arr[m] < x) l = m + 1; |
20 | int arr[] = {2, 3, 4, 10, 40}; |
21 | int n = sizeof (arr)/ sizeof (arr[0]); |
23 | int result = binarySearch(arr, 0, n-1, x); |
24 | (result == -1)? printf ( "Element is not present in array" ) |
25 | : printf ( "Element is present at index %d" , result); |
递归的实现:
01 | int binarySearch( int arr[], int l, int r, int x) |
05 | int mid = l + (r - l)/2; |
06 | if (arr[mid] == x) return mid; |
07 | if (arr[mid] > x) return binarySearch(arr, l, mid-1, x); |
08 | return binarySearch(arr, mid+1, r, x); |
更多关于二分的问题请看无处不在的二分查找