前面两篇介绍了两个常见的基于数组的排序算法,这篇来学习一个数组查找元素的算法,叫二分查找。这个二分查找效率还是比较高的,比较一次就可以判断一半元素。二分查找的前提是有序数组,所以采用二分查找之前,必须要对数组元素进行排序,你可以用冒泡也可以用选择排序。
1.二分查找原理
2.查找一个小于中间值
3.查找一个大于中间值的
4.查找一个不存在的
5.具体二分查找代码实现
package sort;
public class Test_ErFen {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66,77};
System.out.println(getIndex(arr,44));
System.out.println(getIndex(arr,66));
System.out.println(getIndex(arr,68));
}
public static int getIndex(int[] arr, int target) {
//1.定义最小索引,最大索引,中间索引的标记
int max = arr.length - 1;
int min = 0;
int mid = (min+max)/2;
// 当中间值不等于要找的值,就开始循环
while (arr[mid] != target) {
if(arr[mid] < target) {
// 说明目标元素在右半部分,最小的索引改变
min = mid + 1;
}else if (arr[mid] > target) {
// 说明目标元素在左侧半部分,最大的索引改变
max = mid - 1;
}
// 由于上面min或者max发生了改变,所以mid需要重新获取新的值
mid = (min + max)/2;
// 如果最小索引大于最大索引就没有查找的可能性,返回-1
if(min > max) {
return -1;
}
}
return mid;
}
}
打印出: 3, 5, -1