二分法查找数组元素下标

package pra;

import java.util.Scanner;

public class TwoPointsSearch {
    
    private long[] array;
    private int subscripts;//下标
    
    public TwoPointsSearch(){
        array = new long[50];
    }
    
    public TwoPointsSearch(int scanner){
        array = new long[scanner];
    }
    
    //添加数据
    public void insert(long values){
        
        int i;
        
        for(i=0;i<subscripts;i++){                //判断当前插入新值与之前插入值大小,获取插入位置下标
            if(array[i]>values){
                break;
            }
        }
        
        for(int j=subscripts;j>i;j--){            //大值整体后移
            array[j]=array[j-1];
        }
        
        array[i]=values;
        subscripts++;
    }
    
    public int twopointsSearch(int values){                //二分法查找数组元素,并返回下标;
        
        int middle=0,first=0;                              //定义中间和数组首部
        int end=subscripts;                                //定义数组末尾
        
        while(true){
            
            middle = (first + end)/2;
            if(array[middle] == values){
                break;
            }else if(first > end){
                return -1;
            }else{
                if(array[middle] < values){
                    first = middle+1;
                }
                else{
                    end = middle-1;
                }
            }
            
        }
        return middle;
    }
    
    public void output(){                                            //输出
        System.out.print("[");
        for(int i = 0; i < subscripts; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println("]");
    }
    
    public static void main(String[] args) {
        int scanner;                             //接收数组大小值
        int middle;                                 //接收返回值判断有无该元素
        System.out.println("请输入一个正整数(数组大小)");
        Scanner sc = new Scanner(System.in);
        TwoPointsSearch tps = new TwoPointsSearch(scanner = sc.nextInt());
        
        for(int i=0;i<scanner;i++){
            Scanner sc1 = new Scanner(System.in);
            tps.insert(sc1.nextInt());
        }
        
        tps.output();
        
        System.out.println("请输入要查询的数组元素值");
        Scanner sc2 = new Scanner(System.in);
        
        middle = tps.twopointsSearch(sc2.nextInt());        //调用二分法查找
        if(middle == -1){
            System.out.println("无该数组元素");
        }else{
            System.out.println("查询数组元素下表为:"+middle);
        }
        
        return;
    }
    
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值