二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。二分查找时间复杂度为O(log2n),具体关于时间复杂度的推理大家可以去看百度百科!!!
package com.algorithm;
import java.util.Arrays;
/**
* 面试锦集:
* 二分查找/折半查找
*
* @author 小辉GE/小辉哥
* <p>
* 2019年8月6日 下午17:30:00
*/
public class BinarySearch {
public static void main(String[] args) {
// 定义数组,随机生成数据
Integer[] arry = { 36, 12, 35, 69, 56, 89, 71, 100, 101, 12, 36 };
// 先排序
Arrays.sort(arry);
System.out.println("arry数组排序后为:" + Arrays.toString(arry));
int index = binarySearch(arry, 101);
if (index > -1) {
System.out.println("二分查找方式找到该数据,数组下标为:" + index + "对应值是:" + arry[index]);
} else {
System.out.println("二分查找方式未到该数据");
}
}
public static int binarySearch(Integer[] arry, int val) {
// 定义初始最小、最大下标
int start = 0;
int end = arry.length - 1;
// 控制while条件
while (start <= end) {
// 计算出中间位置下标,需要避免溢出
int middle = (end + start) >>> 1;
if (val == arry[middle]) {
return middle;
} else if (val < arry[middle]) {
// 重新定义最大下标界限
end = middle - 1;
} else {
// 重新定义最小下标界限
start = middle + 1;
}
}
return -1;
}
}
测试输出结果如下:
以上代码仅供参考,如有不当之处,欢迎指出!!!
更多干货,欢迎大家关注和联系我。期待和大家一起更好的交流、探讨技术!!!