二分查找法
二分查找法是经典算法之一,二分查找我们在高中有接触过,在高中学习的抛物线中,有对称轴这一概念,在做题时我们经常会以对称轴来分类讨论。
而对称轴就是二分法中的中指针,根据目标值大小判断在中指针(对称轴)的左边还是右边,然后移动左指针 OR 右指针到中指针的位置,缩小搜索范围,缩小范围后再次判断目标值在中指针的左边还是右边,直到目标值位于左指针或者右指针的位置,找到目标值的下标。
代码实现
代码实现一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
static int binarySearch(int [] a,int target){ int i = 0; int j = a.length-1; while (i<=j){ int m = (i+j)>>>1; if (a[m] < target){ i = m+1; } else if (a[m] > target) { j = m-1; } else { return m; } } return -1; }
|
代码实现二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
static int basisSearch(int [] a, int target){ int i = 0 ; int j = a.length; while (i<j){ int m = (i+j)>>>1; if (a[m]<target){ i = m+1; } else if (a[m] > target) { j=m; }else { return m; } } return -1; }
|
代码实现三
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
static int linerSearch(int [] a,int target){ for (int i = 0; i < a.length; i++) { if (a[i]==target){ return i; } } return -1; }
|
代码实现-测试
1 2 3 4 5 6 7 8 9 10 11 12
| public static void main(String[] args) { int [] a ={13,15,19,22,65}; int target = 22;
int i = binarySearch(a, target); int i1 = basisSearch(a, target); int i2 = linerSearch(a, target); System.out.println(i2); }
|
本文章来源于我的博客:https://blog.hikki.site