【基础编程题】数据结构====遍历查找与折半查找(二分法)

要求 :写一个遍历查找与折半查找方法,并遍历打印出来。

  • 数组其实就是一个容器,可以自动给数组中的元素编号0~n,方便操作元素
  • 定义格式:元素类型[] 数组名 = new 元素类型[元素个数或数组长度]

数据明确的情况下:例,int[] arr = new int[]{1,3,5,7,9,11,13,15,17,19,21};

public class ArrayDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr = new int[]{1,3,5,7,9,11,13,15,17,19,21};
        
        //查找元素所在位置:查找成功返回相应索引号,查找失败返回-1
        //1.遍历查找(不在乎是否排序)
        int index = getIndex(arr,3);
        System.out.println("元素3所在位置:"+index);
        //2.折半查找(要求数组已排好序)
        //方法1:
        int index1 = halfSearch(arr,5);
        System.out.println("方法1:5所在的位置:"+index1);
        //方法2:
        int index2 = halfSearch_1(arr,5);
        System.out.println("方法2:5所在的位置:"+index2);
    }
    //遍历打印数组
    public static void printArray(int[] arr){
        System.out.print("(");
        for(int i=0;i<arr.length;i++){//遍历数组
            if(i!=arr.length-1){
                System.out.print(arr[i]+",");
            }else {
                System.out.print(arr[i]+")");
            }
            
        }
    }

    //遍历查找,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组不存在
    public static int getIndex(int[] arr,int key){
        for(int l=0;l<arr.length;l++){
            if(arr[l]==key)
                return l;
        }
        return -1;
    }
    //折半查找1:提高效率,前提是该数组是有序的数组
    public static int halfSearch(int[] arr,int key){
        int min,max,mid;
        min = 0;
        max = arr.length-1;
        mid = (arr.length)/2;
        
        while(arr[mid]!=key){
            if(key>arr[mid]){
                mid = mid+1;
            }else if(key<arr[mid]){
                max = mid-1;
            }
            if(min>max){
                return -1;
            }
            mid = (max-min)/2;
        }
        return mid;
    }
    //折半查找2:提高效率,前提是该数组是有序的数组
    public static int halfSearch_1(int[] arr,int key){
        int min = 0;
        int max = arr.length-1;
        int mid;
        while(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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值