二分查找

文章目录

  • 前言
  • 一、二分查找是什么?
  • 二、原理分析
  • 三、过程演示
  • 四、代码实现
  • 总结


前言

这几天觉得这些基础算法还是很有意思的,所以就继续“玩”了一下,又发现一个有趣的东西,建立排好序集合基础上进行的算法——二分查找,这不刚刚弄懂了一点排序,就迫不及待的学起来了!!!

一、二分查找是什么?

二分查找是一种快速检索数据的算法,又称折半查找。
使用二分查找是需要前提的,被查找集合是有序的否则无法查找,查找到以后返回被查找数的索引(下标)。

二、原理分析

二分查找算法其实就是每次都查找中间那个数。如果排序是升序排列,将需要查找的数与中间数比较,如果是小于,那么这个数就在前半部分,如果是大于则就在后半部中去查找,如果排序是降序排列,则反之。按照这个规律依次查找,直到找到最后一个中间数,当然如果该集合中有这个数的话则返回下标,集合中么有这个数则返回-1;

三、过程演示

为了方便演示,直接建立一个有序int类型数组{3,4,5,6,7,8}
查找元素4所在的位置
因为判断次数是未知的所以用while循环更方便

初始数组

索引 minIndex = 0 1 midindex = 2 3 4 maxIndex = 5
元素 3 4 5 6 7 8

经过第一次判断赋值后

索引 minIndex=midIndex = 0 maxIndex =1 2 3 4 5
元素 3 4 5 6 7 8

经过第二次判赋值制后

索引 0 minIndex =maxIndex=midIndex =1 2 3 4 5
元素 3 4 5 6 7 8

这样array[midindex] = 4 就是我们要找的数,返回4所在的下标。

四、代码实现

代码如下(示例):

public class Test03 {
     

	public static void main(String[] args) {
     
		int[] array = {
     3,4,5,6,7,8}; // 创建一个int类型的数组
		int index = binarySearch(array, 4);// 调用binarySearch方法传入需要的参数,且接受返回值
		System.out.println(index);
	}
	public static int binarySearch(int[] array,int value) {
     //创建binarySearch方法带两个参数,一个是int数组,一个是整数,且有int返回值
		int maxIndex  = array.length-1; //根据数组元素设置最大下标
		int minIndex =0;//设置最小下标
		int midIndex = (maxIndex+minIndex)/2;//根据最大和最小下标得出中间下标(注意:int类型的除法是向下取整)
		while(array[midIndex]!=value) {
     //判断中间下标对应的值是否是需要查找的值
			if(maxIndex>=minIndex) {
     // 加强判断,正常情况下minIndex是不能大于maxIndex,加强代码的健壮性
				if(array[midIndex]>value) {
     //判断如果中间下标对应的值大于需要查找的值,则更改最大下标为midIndex-1
					maxIndex = midIndex-1;
				}else if(array[midIndex]<value) {
     //判断如果中间下标对应的值小于需要查找的值,则更改最大下标为midIndex+1
					minIndex = midIndex+1;
				}
				midIndex = (maxIndex+minIndex)/2;//从新赋值给中间下标(midIndex)
			}else {
     
				midIndex = -1; // 如果输入的值在被查找的集合中不存在,则返回-1提醒
				break; //退出整个进程
			}
		}
		return midIndex;
	}
}

代码如下(输出):

1

总结

其实对于这些基础算法个人觉得懂原理比较重要,因为原理只有一个但是实现方式多种多样。

你可能感兴趣的:(有趣的Java数据结构算法,面试,java,算法,数据结构)