JAVA之二分查找

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z249486888/article/details/83821774

数组中查找元素的方式有两种:1、基本查找:适用于数组元素无序

                                                      2、二分查找(折半查找):适用于数组元素有序

思想:1、定义最小索引值,最大索引值并计算出中间索引值。

           2、判断中间索引值是否等于需要查找的值:A、等于 B、不等于

           3、当A情况时,返回该索引值

           4、当B情况时,判断中间索引值与需要查找的值的关系 A、大于 B、小于

           5、当A情况时,最小索引值不变,最大索引值等于中间索引值减1,然后再回到第2条。

           6、当B情况时,最大索引值不变,最小索引值等于中间索引值加1,然后再回到第2条。

    

	public static void main(String[] args) {
		int[] a = { 1, 3, 5, 12, 24, 34, 56, 78, 79, 89 };
		int vaule = 79;
		System.out.println(GetIndex(a, vaule));
	}

	static int GetIndex(int[] a, int vaule) {
		int min = 0;//定义最小索引
		int max = a.length;//定义最大索引
		int mid = (min + max) / 2;//计算中间索引
		while (a[mid] != vaule) {
			if (a[mid] > vaule) {//中间索引对应的值大于需要查找的值
				max = mid - 1;
				mid = (max + min) / 2;
			} else if (a[mid] < vaule) {//中间索引对应的值小于需要查找的值
				min = mid + 1;
				mid = (max + min) / 2;
			}
			if (min > max) { //判断是否存在该值
				return -1;
			}
		}
		return mid;
	}

注意:当所数组中不存在需要查找的值时应该怎么判断?

当不存在该值时,最小索引min的值无限加1,最大索引max的值无限减1。则当min>max时即说明不存在该值。

猜你喜欢

转载自blog.csdn.net/z249486888/article/details/83821774