基础语法-无序/有序数组中元素的查找

       基础语法-无序/有序数组中元素的查找

                             作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.直接遍历数组进行查找(数组有序/无序都能使用)

/**
 *    数组中元素的查找
 *     @author 尹正杰
 */
public class ArrayDemo6 {
    public static void main(String[] args) {
        int[] arr = {1,20,3,80,5,200,175,10};
        
        System.out.println(getIndex(arr,100));
        
        System.out.println(getIndex(arr,200));
    }
    
    /*
     *     对数组中的元素进行查找,获取元素第一次出现的位置:
     *         如果找到了,就返回元素对应的索引
     *         如果没有找到则返回整数"-1",表示该元素并不在数组中存在
     */
    public static int getIndex(int[] arr,int value) {
        
        for (int index = 0; index < arr.length; index++) {
            if (arr[index] == value) {
                return index;
            }
        }
        return -1;
    }
}

二.使用二分法(二分法)查找(必要前提是数组是有序的)

/**
 *    数组中元素的查找
 *     @author 尹正杰
 */
public class ArrayDemo6 {
    public static void main(String[] args) {
        //注意,必须保证数组是有序的,否则折半查找的索引就不准确啦!
        int[] arr = {1,3,8,50,175,198,200,300,500};
        
        System.out.println(helfSearch(arr,100));
        
        System.out.println(helfSearch(arr,200));
    }
    
    /*
     *     对数组中的元素进行查找,获取元素第一次出现的位置:
     *         如果找到了,就返回元素对应的索引
     *         如果没有找到则返回整数"-1",表示该元素并不在数组中存在
     */
    public static int helfSearch(int[] arr,int value) {
        int min,mid,max;
        min = 0;
        max = arr.length -1;
        mid = (max + min)/2;
        
        while (arr[mid] != value) {
            if (value > arr[mid]) {
                min = mid + 1;
            }else if (value < arr[mid]) {
                max = mid - 1;
            }
            //如果min大于max,说明查询的元素不存在,这个直接执行结束
            if (min > max) {
                return -1;
            }
            
            mid = (min + max) / 2;
        }
        return mid;
    }
}

原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12221324.html