黑马程序员技术交流社区

标题: 早晨又把阳哥的总结看看了,敲敲以前的代码还是又收获 [打印本页]

作者: anyway1919    时间: 2015-9-8 10:16
标题: 早晨又把阳哥的总结看看了,敲敲以前的代码还是又收获
本帖最后由 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;
        }
}


12.png (125.15 KB, 下载次数: 4)

12.png

11.png (111.72 KB, 下载次数: 4)

11.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2