A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 史世锋 中级黑马   /  2015-9-13 19:31  /  358 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;

public class Test018
{

        /**
         * 查找一个元素在数组中出现的位置
         * 普通查找:遍历数组,将要查找的值与数组的每个元素进行比较。
         * 折半查找:首先数组是有序的(升序)。MIN = 0, MAX = arr.length -1, MID = (MIN + MID)/2;
         *        先将数组的中间位置元素比较(key == arr[MID])
         *        如果key>arr[MID],MIN = MID+1
         *        如果key<arr[MID],MAX = MID-1;
         *        再将数组的中间位置元素比较(key == arr[MID])
         *        如果找到 该元素的下角标是MID,如果MIN>MAZ还没找到,则key不在数组中
         *        
         * @param args
         */
        public static void main(String[] args)
        {
                int[] arr = new int[]{52, 68, 45, 0, 12, 58, 71, 35, 95, 46};
                Test017.printArr(arr);
               
                int key = 69;
                int index = getIndex(arr, key);
                System.out.println(key +"的位置是:" + index);
               
                //对数组进行排序
                Test017.setAscending_2(arr);
                Test017.printArr(arr);
               
                index = halfSearch(arr, key);
                System.out.println(key +"的位置是:" + index);
        }
        //获取元素出现的位置,如果有,返回下角标,如果没有,返回-1
        public static int getIndex(int[] arr, int key)
        {
                for(int i = 0; i < arr.length; i++)
                {
                        if(arr[i] == key)
                                return i;
                }
                return -1;
        }
        //折半查找(如果找到,返回元素的下角标,如果找不到返回一个位置,使key插入到数组中,数组仍是有序的)
        public static int halfSearch(int[] arr, int key)
        {
                int max = arr.length -1, min = 0, mid = 0;
                for(int i = 0; min <= max; i++)
                {
                        mid = (max + min)/2;
                        if(key > arr[mid])
                        {
                                min = mid + 1;
                        }
                        else if(key < arr[mid])
                        {
                                max = mid - 1;
                        }
                        else
                                return mid; //返回元素的下角标
                }
                return min; //返回插入的位置
        }
}


2 个回复

倒序浏览
看过了 ,受教
回复 使用道具 举报
原码插入是-min-1...你可以随便记着
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马