JAVA基础篇----二分查找
概述
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据
必须采用顺序存储结构有序排列。
原理
首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;
否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数
组,否则进一步查找后子数组。重复以上过程,直到找到满足条件的数据,则表示查找成功,直到子数组不存在为止,表示查找不成功。
优点
比较次数少,查找速度快,数据量越大,利用二分查找节省的性能越高。
缺点
要求待查数据要有序排列,且插入删除困难。
在数组中利用二分查找查找数据
1.找到要查数据的边界,在数组中为最小下标和最大下标。
2.利用最小下标和最大下标找到中间下标,中间下标等于最小下标+最大下标除以2.
3.比较要查找的数据与中间下标数据的大小。如果要查找数据大于中间下标数据,将最小下标修改为中间下标+1,如果要查找的数据小于中间下标数据,将最大下标改为中间下标-1。
4.当最小下标大于最大下标时,说明数据是不存在的。
5.重复的执行上面的过程直到中间下标的数据与要查找的数据相等。中间下标的值就是要查数据的位置。
二分查找代码
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
//接受用户输入并创建一个数组
Scanner input = new Scanner(System.in);
int[] nums = new int[10];
for(int i = 0;i<10;i++) {
System.out.println("请输入一个整数:");
nums[i] = input.nextInt();
}
System.out.println("请任意输入一个要查找的整数:");
int num = input.nextInt();
//二分查找
int minIndex = 0;
//最大范围下标
int maxIndex = nums.length-1;
//中间数据下标
int centerIndex = (minIndex+maxIndex)/2;
while(true) {
// 中间数据较大
if(nums[centerIndex]>num) {
maxIndex = centerIndex-1;
}else if(nums[centerIndex]<num) {
//中间数据较小
minIndex = centerIndex+1;
}else {
//找到了数据,数据位置:centerIndex
break;
}
if(minIndex>maxIndex) {
centerIndex = -1;
break;
}
//当边界发生变化,需要更新中间下标
centerIndex = (minIndex+maxIndex)/2;
}
System.out.println("位置"+centerIndex);
}
}