Search algs

第一次开始学算法就是二分法了吧,那时候就是感觉神奇+有趣,嗯,还是记录一下吧

推荐:算法4讲的内容,很清楚的

 1 public static int search(int[] a, int k) {
 2         int lo = 0, hi = a.length - 1;
 3         if (k < a[lo] || k > a[hi]) return -1;
 4 
 5         /**
 6          * 1. mid +1/-1是为了防止相邻两个位置的作比较得出mid永远等于lo的情况,从而无限循环
 7          * 2. 另一方面mid +1/-1排除了mid位置的元素 (最近在发现第一点,一直以来都以为是因为考虑到第二点,谨记谨记)
 8          */
 9         while (lo <= hi) {
10             int mid = lo + (hi - lo) / 2;
11             if (a[mid] < k) lo = mid + 1;
12             else if (a[mid] > k) hi = mid - 1;
13             else return mid;
14         }
15         return -1;
16     }

猜你喜欢

转载自www.cnblogs.com/crazyRanZhang/p/9612729.html