目录:
1.概述与原理2.条件3.实现方法
1.概述与原理
二分查找有称折半查找,原理就是在按照顺序存储且有序的序列中每次取序列中间值,如果查询内容小于中间值,则取序列前半段继续同样的取值对比操作直到位置起始值大于结束值为止,反之亦然。
2.条件
2.1 顺序存储
2.2 有序
3.实现方法
实现方法有两种:1.递归调用 2.while循环 ,下面附上两种方法的代码。
package com.elimy.arithmetic;
import javax.lang.model.element.Element;
public class BinarySearch {
/*
* 无参构造方法
*/
public BinarySearch() {
}
public static void main(String[] args) {
int[] array={1,3,5,8,10,15,18};
//int exist = binarySearch(array, 0, array.length - 1, 1);
int exist=binarySearch(array, 16);
System.out.println("是否存在:" + exist);
}
/*
* 二分查找算法实现(采用递归调用)
* @参数:有序的数组,和需要查询的字段,以及开始结束位置
* @返回值:存在返回该值,不存在返回-1
*/
public static int binarySearch(int[] orderArray, int start, int end, int searchParam) {
int index=(start+end)>>1;//int index = (start + end) / 2;
if (start <= end) {
// 中间值
int mid = orderArray[index];
System.out.println("mid:" + mid);
if (searchParam == mid) {
return searchParam;
} else if (searchParam < mid) {
System.out.println(searchParam+" <"+ mid);
return binarySearch(orderArray, start, index - 1, searchParam);
} else {
System.out.println(searchParam+" >"+ mid);
return binarySearch(orderArray, index + 1, end, searchParam);
}
} else {
return -1;
}
}
/*
* 二分查找算法实现(采用循环)
* @参数:有序的数组,和查询的值
* @返回值:存在返回该值,不存在返回-1
*/
public static int binarySearch(int[] orderArray, int searchParam) {
int start=0;
int end=orderArray.length-1;
int mid_index=0;
while (start<=end) {
mid_index=(start+end)>>1;
if(orderArray[mid_index]==searchParam){
return searchParam;
}else if (searchParam<orderArray[mid_index]) {
end=mid_index-1;
}else {
start=mid_index+1;
}
}
return -1;
}
}