关于JAVA的二分查找算法

关于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;
}}

运行结果如下,通过二分查找可以快速的找到一维数组里的目标元素
运行结果如下,通过二分查找可以快速的找到一维数组里的目标元素,但是使用二分查找必须先对数组进行排序,这里主要讲的是二分查找给的一维数组是已经排好序的。

猜你喜欢

转载自blog.csdn.net/weixin_54794309/article/details/113790781
今日推荐