编程珠玑中提到了 二分搜索,这也是各大公司面试和笔试的常考题,乍看一下此题很简单,用递归和循环都可以做出来,但是却隐藏了对程序员编写代码能力的考察,以及考虑事情范围的全面性。
下面看一下二分搜索的循环代码
1 int binarySearch(int low , int high,int z,int a[]) 2 { 3 4 if((low>high)||low<0||high<0) 5 { 6 return -1;// 分析输入参数的各种错误 7 8 } 9 while (low <= high) 10 { 11 int mid = (low + high) / 2; 12 if (a[mid]< z) 13 { 14 low = mid + 1; 15 } 16 else if (a[mid] > z) 17 { 18 high = mid - 1; 19 } 20 else 21 { 22 return mid; 23 } 24 } 25 return -1; 26 }
但是,编程珠玑里面留了一个问题给大家,见习题4.6 的第二题,大意是这样,如果我们查找的元素在数组里面存在多个,那么如何查询此元素出现的第一个位置?