java 二分查找 - 折半查找算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 二分查找 - 折半查找算法相关的知识,希望对你有一定的参考价值。

二分查找:


这个算法是比较简单的,容易理解的。这个算法是对有序的数组进行查找,所以想要使用这个算法那么

首先先要对数组进行排序。


其实有三个指针,开始指针,末尾指针,中间指针,来开始。折半查找。

步骤如下:

1、确定三个指针,start,end,middleIndex。

2、判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到。

3、在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值。

4、判断中间位置的值和目标值是否相等,如果相等就返回这个位置。

不相等,如果中间位置的值比目标值大,就在左半边的数组来递归查找这个目标值,

否则在右边的数组查找递归这个目标值。

5.返回值。


package com.test4;

/**
 * 二分查找
 * 
 * @author sdc
 *
 */
public class BinarySearch {

	// 查找某个元素需要的次数
	static int count;
	
	public static void main(String[] args) {
		
	}

	/**
	 * 二分查找--递归的形式,二分查找是对有序的数组查找
	 * 
	 * @param sortArray
	 * @param start
	 * @param end
	 * @param target
	 * @return
	 */
	public static int binarySearch(int[] sortArray, int start, int end, int target) {

		if (sortArray == null) {
			return -1;
		}

		int sortArrayLength = sortArray.length;
		if (sortArrayLength == 1) {
			return sortArray[0];
		}

		count++;
		// 真正开始了,查找
		if (start <= end) {

			// 中间的位置
			int middleIndex = (start + end) >> 1;
			// 中间的值
			int middleData = sortArray[middleIndex];

			if (middleData == target) {
				return middleIndex;
			} else if (middleData < target) {
				return binarySearch(sortArray, middleIndex + 1, end, target);
			} else {
				return binarySearch(sortArray, start, middleIndex - 1, target);
			}
		} else { // 给的返回值不对
			return -1;
		}

	}

	/**
	 * 二分查找-非递归的形式
	 * 
	 * @param sortArray
	 * @param target
	 * @return
	 */
	public static int serarch(int[] sortArray, int target) {
		if (sortArray == null) {
			return -1;
		}

		// 起始位置
		int start = 0;
		// 结束位置
		int end = sortArray.length - 1;

		while (start <= end) { // 一直循环查找

			// 中间位置
			int middleIndex = (start + end) >> 1;
		
			if(sortArray[middleIndex] == target) {
				return middleIndex;
			}else if(sortArray[middleIndex] > target) {
				end = middleIndex -1;
			}else {
				start = middleIndex +1;
			}
		}
		
		return -1;
	}

}


结束:

本文出自 “10093778” 博客,请务必保留此出处http://10103778.blog.51cto.com/10093778/1918333

以上是关于java 二分查找 - 折半查找算法的主要内容,如果未能解决你的问题,请参考以下文章

C语言二分查找算法,折半查找算法

二分查找算法(JAVA)

数组常用算法之冒泡排序二分查找(折半查找)

python实现二分查找(折半查找)算法

C语言试题177之实现二分查找算法,折半查找算法

二分查找(折半查找)算法详解(C语言实现)