第三次作业——顺序查找,二分查找

来源:互联网 发布:网络流行年轻群体文化 编辑:程序博客网 时间:2024/05/22 03:00
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Search {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int searchNum;//要查询的数字
        int signOne,signTwo;//用来判断
        int readNum;//存放文本转化的数字
        
        System.out.print("请输入要查找的数据:");
        Scanner scan = new Scanner(System.in);
        searchNum = scan.nextInt();
        
        try{
            FileReader f = new FileReader("C:/Users/Y470/Desktop/largeW_bubble.txt");
            BufferedReader br = new BufferedReader(f);
            
            ArrayList arraylist = new ArrayList();
            String line = br.readLine();
            while (line != null) {
                readNum = Integer.parseInt(line.trim());
                arraylist.add(readNum);
                line = br.readLine();
            }    
            int array[] = new int[arraylist.size()];//存放从文本读出来的数据
            
            for(int i=0;i<array.length;i++){
                array[i] = (Integer) arraylist.get(i);
            }
            
            //顺序查找
            signOne = SSearch(array,array.length-1,searchNum);
            if(signOne == 0){
                System.out.print("顺序查找:");
                System.out.println("数据"+array[signOne]+"查不到");
            }
            //二分查找
            signTwo = BSearch(array,1,array.length-1,searchNum);
            
            if(signTwo == 0){
                System.out.print("二分查找:");
                System.out.println("数据"+array[signTwo]+"查不到");
            }
            br.close();
            
        }catch(Exception e){
            e.printStackTrace();
        }    
    }
    //顺序查找
    public static int SSearch(int arr[],int high, int target ){
        int i = high;
        arr[0] = target;
        while(arr[i] != target){
            i--;
        }
        return i;    
    }
    //二分查找
    public static int BSearch(int arr[],int low,int high,int target){    
        int mid;
        if(low>high)
            return 0;
        else{
            mid = (low+high)/2;
            if(target<arr[mid]){
                return BSearch(arr,low,mid-1,target);
            }
            else if(target>arr[mid]){
                return BSearch(arr,mid+1,high,target);
            }
            else
                return mid;
        }
    }

}




0 0
原创粉丝点击