二分法查找数组元素下标

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             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 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;
    }
    
}
 

你可能感兴趣的:(数据结构算法)