关于JAVA的二分查找算法
#以下会详细介绍二分查找算法的原理和实现,也是自己对于二分查找算法的学习巩固和理解。
二分法查找(又叫折半查找):
第一 : 二分法查找建立在排序的基础之上。
第二: 二分法查找效率要高于"一个挨着一个"的这种查找方式。
第三: 二分法查找原理?
首先给定一个一维数组
int[] arr={10,23,56,89,100,111,222,235,500,600}
我们知道数组元素的开始元素的下标为0,结束下标为arr.length-1。
现在我们来查找元素 目标:找出600的下标
(0+ 9)/2 =4 (中间元素的下标)
arr[ 4]这个元素就是中间元素:
arr[4]是100 ,
100 < 600
说明被查找的元素在100的右边。那么此时开始下标变成:4 +1
(5 +9) /2 =7 (中间元素的下标)
arr[7]对应的是:235
235 < 600
说明被查找的元索在235的右边。
开始下标又进行了转变:7 +1
(8 + 9)/ 2=8
arr[8]–>500 500 < 600
开始元素的下标又发生了变化:8 +1(9 + 9)/ 2 =9
arr[9]是600,正好和600相等,此时找到了。
以上就是二分查找的原理,接下来我们用代码来实现
package com.hu.javase.algorithm;
public class ArrayUtil {
public static void main(String[] args) {
int[] arr={
100,150,167,222,235,264,888};
int index=binarySearch2(arr, 888);
System.out.println(index==-1 ? "该元素不存在":"该元素找到了!它的下标是"+index);
}
/**
*
* @param arr被检索的数组
* @param ele目标元素
* @return返回-1表示改下标没有找到,返回其他代表该元素下标
*/
public static int binarySearch2(int[] arr, int ele) {
int end=arr.length-1;//结束元素:数组长度-1
int begin=0;//开始元素,数组下标为0的元素
while (begin<=end) {
//(开始元素+结束元素)/2 找到中间元素
int mid = (begin + end) / 2;
//找到中间元素之后和ele目标元素进行比较
if (arr[mid] == ele) {
return mid;
} else if (arr[mid] < ele) {
//目标元素在中间元素的右边
//开始元素需要发生变化,变成中间元素+1,继续循环折半查找
begin = mid + 1;
} else {
//目标元素在中间元素的左边
//结束元素需要发生变化,变成中间元素-1,继续循环折半查找
end = mid - 1;
}
}
//上述循环结束,没有找到说明没有被检索的数据,返回-1
return -1;
}}
运行结果如下,通过二分查找可以快速的找到一维数组里的目标元素,但是使用二分查找必须先对数组进行排序,这里主要讲的是二分查找给的一维数组是已经排好序的。