zoukankan      html  css  js  c++  java
  • java二分查找法的实现过程

    首先,我们实现如下需求:在数组中查找一个数字,返回该数字在数组中的索引值,否则返回-1;代码如下

        public static void main(String args[]){
            int[] arr = {1,2,3,4,5,6,7};                    //定义数组arr
            int index = searchEle(arr,6);               //调用方法searchEle,并传递参数arr和要找的数字6
            System.out.println("元素所在索引为: "+index);    
            
        }
        public static int searchEle(int[] arr,int tag ){           //定义方法,返回值为int
            for(int i = 0;i<arr.length;i++){ 
                if(arr[i] == tag){
                    return i;
                }
            }
            return -1;
        }
    }

    要找的元素为6,其索引值为5;我们不难发现要找到这个数字,在数组中要经过6次比较才找到。我们不妨换一种思路:

    在一个有序的数组中,我们定义三个变量表示最小索引值,最大索引值和中间的索引值,然后将目标数字与中间的数字进行比较,不断缩短查找范围(注意的是,这只适用于有序的情况)

    public static void main(String args[]){
            int[] arr = {1,2,3,4,5,6,7};
            int index = halfSearch(arr,1);
            System.out.println("索引值为: "+index);
            
        }
        public static int halfSearch(int[] arr,int target){
            //定义三个变量表示最小,最大,中间的表示范围
            int max = arr.length-1;
            int min = 0;
            while(min<=max){
                int mid = (max+min)/2;
                if(target==arr[mid]){
                    return mid;
                }else if(target<arr[mid]){
                    max = mid-1;
                }else{
                    min = mid+1;
                }
            }
                    return -1;    
        }
        
  • 相关阅读:
    nginx详解
    keeplived高可用集群
    mysql主从同步
    elasticsearch基础
    redis集群管理--sentinel
    socket阻塞与非阻塞,同步与异步,select,pool,epool
    django+channels+dephne实现websockrt部署
    Django+Nginx+uWSGI生产环境部署
    进制转换
    对golang指针的理解
  • 原文地址:https://www.cnblogs.com/zflovezk9/p/8316447.html
Copyright © 2011-2022 走看看