一.什么是二分法查找
二分法查找的前提条件是先排序在查找Arrays.sort(); 因为不排序的话无法判断查找的元素在中间元素的左边还是右边,所以要先排序。
二分法就是把排序好的数组从中间截取分成两份,用数组中间的元素与要查找的元素进行比较,中间元素大于查找的元素就说明要查找的元素在前半部分否则就在后半部分。然后舍弃后半部分再用前半部分重复上面的步骤。原理就是如此直到要查找的元素等于中间元素。
注意:前半部分或者后半部分并不代表一个新的数组,对应元素的下标始终不变化。
以数组 int[ ] a={11,22,33,44,55,66,77,88,99}; 为例,要查找元素33,分两份中间元素为55(第一个下标和最后一个下标的和除二就是中间元素下标,int型),55>33,所以在前半部分 {11,22,33,44}再把前半部分分两份中间元素为22,22小于33所以在后半部分{33,44},中间元素为33,33等于33,查找完成。
二.代码
public static void main(String[] args) {
int[] nums={12,56,89,45,20,36,99};//原数组
int num=100;//要查找的元素
Arrays.sort(nums);//升序排序
System.out.println("排序后的数组为:" + Arrays.toString(nums));//排序后的数组
int first = 0;//数组首部下标
int end = nums.length - 1;//数组尾部下标
int a = 0;//最后输出的a就为查找的元素的下标
while (first <= end) {//判断条件 不满足就说明要查找的元素不存在
int mid = (first + end) / 2;//中间元素下标 因为首尾下标变化会影响中间元素下标故写在循环内
a = mid;
if (nums[mid] > num) {//查找元素小于中间元素
end = mid - 1;//尾部下标变化 首部不变
} else if (nums[mid] < num) {//查找元素大于中间元素
first = mid + 1;//首部下标变化 尾部不变
} else {//都不满足说明等于 输出a 结束循环
System.out.println(a);
break;
}
}
if (first > end) {//当数组内没有你要查找的元素 就会不满足循环条件
System.out.println("没有这个数字");//输出没有这个数
}
}