算法系列-二分查找(JAVA版)
简介
记录自己的学习的算法
算法图解云:
二分查找是一种算法,其输入是一个有序的元素列表(必须是有序的),如果查找的元素包含在列表中,二分查找返回其位置,否则返回NULL
二分查找符合我们的生活习惯,就比如假设要在电话簿中找一个名字以K打头的人,(现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间
二分查找JAVA实现
/**
* 二分查找非递归实现
*
* @param list 有序数组
* @param value 查找的值
* @return java.lang.Integer
* @author cuishilei
* @date 2019/7/9
*/
private static Integer binarySearch(int[] list, int value) {
int low = 0;
int high = list.length - 1;
//如果前后索引没有“相遇”,则继续二分
while (low <= high) {
//得到“中间值”的索引
int mid = (low + high) / 2;
//中间值
int hitValue = list[mid];
//直接命中
if (hitValue == value) {
return mid;
}
//如果中间值大于 value ,则 value 在前半段
if (hitValue > value) {
high = mid - 1;
} else {//否则 value 在后半段
low = mid + 1;
}
}
return null;
}
/**
* 二分查找递归实现
*
* @param list 有序数组
* @param low 分区前
* @param high
* @param value
* @return java.lang.Integer
* @author cuishilei
* @date 2019/7/9
*/
private static Integer binarySearch(int[] list, int low, int high, int value) {
if (low <= high) {
//得到“中间值”的索引
int mid = (low + high) / 2;
//中间值
int hitValue = list[mid];
//直接命中
if (hitValue == value) {
return mid;
}
//如果中间值大于 value ,则 value 在前半段
if (hitValue > value) {
return binarySearch(list, low, mid - 1, value);
} else {//否则 value 在后半段
return binarySearch(list, mid + 1, high, value);
}
}
return null;
}
public static void main(String[] args) {
int[] list = {1, 4, 6, 9, 22};
System.out.println(binarySearch(list, 6));
System.out.println(binarySearch(list, 0, list.length - 1, 6));
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com
文章标题:算法系列-二分查找(JAVA版)
文章字数:453
本文作者:崔石磊(RockeyCui)
发布时间:2018-08-18, 18:00:00
原始链接:https://cuishilei.com/算法系列-二分查找-JAVA.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。