算法实现二分(通俗易懂)

1.二分的原理

什么是二分,二分二分,就是将一个完整的东西分成两份,它在算法中的应用场景大部分是进行查找某一个数,或者来查找边界。接下来我们来看一下具体实现

2.二分查找某个数

二分算法对于问题的实现大同小异,但是离不开核心原理,如果我们要找的数是4的位置,首先找到数组的中点,然后将这个中点与你查找的数进行比较(如果中点是4直接返回),如果这个值小于4,那证明左半边不可能有我们要找的数,那么我们直接让L=中点+1,然后再从中点+1到R的范围内再找中点,直到找到我们想要找的数算法实现二分(通俗易懂)_第1张图片

public static int BSExist(int []arr,int num) {
		if (arr == null || arr.length == 0) {
			return 0;
		}
		int L=0;
		int R=arr.length-1;
		int mid=0;
		while (L>1);
			if(arr[mid] == num) {
				return 1;
			}
			else if(arr[mid]>num) {
				R=mid-1;
			}
			else {
				L=mid+1;
			}
		}
		System.out.print(arr[L]);
		return L;
	}


 

3.二分查找某个范围

如果是这样一个数组让我们找到大于等于3的位置,就意味着我们要找到最左边的3,所以当我们中点取到3时不算完,这证明右边没有我们要找的数了,直接让R=mid-1,再不断重复读,与找某个数不同,这个代码会从头执行到尾,所以最后的L就是要找的边界

算法实现二分(通俗易懂)_第2张图片

private static int BSNear(int []arr,int num) {
		if (arr == null || arr.length == 0) {
			return 0;
		}
		int L = 0;
		int R = arr.length - 1;
		while (L < R) {
			int mid = L + ((R - L) >> 1);
			if (arr[mid] >= num) {
				R = mid - 1;
			}
			else {
				L = mid + 1;
			}
		}
		return L;
		
	}

4.二分的时间复杂度

由于二分是每次一半一半的分,所以二分的复杂度是O(log2N),例如原本8个数遍历查找需要8次,而用二分很显然只需要3次

你可能感兴趣的:(算法,java,笔记,开发语言)