本帖最后由 anyway1919 于 2015-9-8 10:19 编辑  
 
Java基础-数组基本查找 
package com.review.demo; 
 
public class BasicSelectDemo { 
 
        /** 
         * 简单遍历查找方式:查找数组中制定元素所在的角标 
         */ 
        public static void main(String[] args) { 
                // 定义一个整形数组 
                int [] arr = new int []{2,1,5,7,9,8};//也可以直接定义{2,1,5,7,9,8} 
                //定义一个整形变形接受返回值 
                int index = getIndex(arr,7); 
                //输出返回值 
                System.out.println(index); 
        } 
        //定义一个功能 
        private static int getIndex(int[] arr, int key) { 
                //遍历数组 
                for (int j = 0; j < arr.length; j++) { 
                        if (arr[j]==key) { 
                                //如果找到返回叫角标值 
                                return j; 
                        } 
                } 
                //如果没找到返回-1 
                return -1; 
        } 
} 
 
二分查找 
package com.review.demo; 
public class BinarySearchDemo { 
        /** 
         * 需求:使用二分查找数组中指定元素所在的角标 
         * 思路: 
         * 1,定三个变量min,max,mid分别表示数组的数组最小、最大和中间角标 
         * 2,循环遍历数组,通过比较数组的中间角标元素和要查找的key,来更改min或max:具体如下 
         *                 1,当数组arr[mid]>key,令max= mid-1;再返回上步骤循环 
         *                 2,当数组arr[mid]<key,令min=mid+1,再返回上步骤循环 
         *                 3,当循环遍历没有找到要查找的元素,条件是:min>max,此时就返回-1 
         *                 4,最后循环一次更改一次mid的值,mid=(min+max)/2 
         *  
         */ 
        public static void main(String[] args) { 
                // 定义一个Int类型的有序数组 
                int [] arr = {2,3,5,7,9,10,23}; 
                 
                //定义一个方法 
                int index = BinarySearch(arr,21); 
                //输出index 
                System.out.println(index); 
        } 
 
        private static int BinarySearch(int[] arr, int key) { 
                // 定义三个变量 
                int min,max,mid; 
                min = 0; 
                max = arr.length-1; 
                mid = (min+max)>>1; 
                while (arr[mid]!=key) { 
                        if (arr[mid]>key) { 
                                max =mid-1; 
                        }else if (arr[mid]<key) { 
                                min = mid +1; 
                        } 
                        //如果不存在就返回-1 
                        if (min>max) { 
                                return -1; 
                        } 
                        mid = (min+max)/2; 
                } 
                //元素存在就返回该元素所在的角标值 
                return mid; 
        } 
} 
 
 
 |   
        
 
    
    
    
    
 
 
 |