数组的查找操作

/*
数组的查找操作

练习:有一个有序的数组,将要将一个元素插入到该数组中,还要保证该数组是有序的
如何获取该元素获取数组中的位置
*/

class  ArrayTest4
{
    public static void main(String[] args) 
    {
        int[] arr={1,3,5,9,32,45};
        int index=getIndex_2(arr,9);
        System.out.println("index="+index);
    }
    public static int getIndex_2(int[] arr,int key)
    {
        int min=0,max=arr.length-1,mid;
        while(min<=max)  //min,max之间有距离就可以折半
        {
            mid=(max+min)>>1;
            if(key>arr[mid])
                min=mid+1;
            else if(key<arr[mid])
                max=mid-1;
            else 
                return mid;
        }
        return min;

    }
    //折半的第二种方式
    public static int halfSearch_2(int[] arr,int key)
    {
        int min=0,max=arr.length-1,mid;
        while(min<=max)  //min,max之间有距离就可以折半
        {
            mid=(max+min)>>1;
            if(key>arr[mid])
                min=mid+1;
            else if(key<arr[mid])
                max=mid-1;
            else 
                return mid;
        }
        return -1;
    }
    /*
    折半查找,提高效率,但是必须保证该数组时有序数组
    */
    public static int halfSearch(int[] arr,int key)
    {
        int min,max,mid;
        min=0;
        max=arr.length-1;
        mid=(max+min)/2;
        while(arr[mid]!=key)
        {
            if(key>arr[mid])
                min=mid+1;
            else if(key<arr[mid])
                max=mid-1;
            mid=(max+min)/2;
            if(min>max)
                return -1;
        }
        return mid;
    }
    //定义功能,获取key第一次出现在数组中的位置,如果返回-1,那么代表该key在数组中不存在
    public static int getIndex(int[] arr,int key)
    {
        for(int x=0;x<arr.length;x++)
        {
            if(arr[x]==key)
                return x;
        }
        return -1;
    }
}

 

posted @ 2015-08-01 14:48  七彩木兰  阅读(298)  评论(0编辑  收藏  举报