天天看點

java日常學習:直接查找法和二分法(折半法)查找數組元素java代碼段

java代碼段

java直接查找法查找數組元素

/*
直接查找法:查詢輸入的值是否存在,如果存在就輸出索引值,不存在就傳回-1;
*/
import java.util.*;     //别忘了導入;
class demo5{
    public static void main(String[] args) {
        int[] arr={4,54,7,3,1,79,68,78};
        int i=suoYin(arr);
        System.out.println("你查詢的數索引值是:"+i);
    }


    public static int suoYin(int arr[]){
        System.out.println("請輸入你要查詢的值:");
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        for (int i=0;i<arr.length ;i++ ){
            if (arr[i]==a){
                return i;
            }   //此處省略else,如果沒找到就繼續查找,找到了直接傳回,就是停止了循環;
        }
        return -1;
    }
}
           

java二分法(折半法)查找數組元素

/*
折半查找法:隻适用于有序數組,而且資料量較大時這個方法較好;
當查找的數字不存在,則傳回-1;
*/
import java.util.*;
class demo6 {
    public static void main(String[] args) {
        int arr[]={1,2,3,4,5,6,7,8,9};
        int i=halfSearch(arr);
        System.out.println("你查找的數的索引值是:"+i);
    }

    //二分法
    public static int halfSearch(int arr[]){
        System.out.print("請輸入你要查找的數字:");
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        //定義三個變量記錄查找範圍的最大、最小和中間值;
        int max=arr.length-1;
        int min=0;
        int mid=(max+min)/2;
        while(true){
            if (a>arr[mid]){
                min=mid+1;
            }
            else if (a<arr[mid]){
                max=mid-1;
            }
            else{
                return mid;     //找到的情況下;
            }
            mid=(max+min)/2;   //由于上面最大值和最小值改變會改變中間值,是以重置mid值;
            //查找值不存在的情況下;
            if (min>max){
                return -1;
            }
        }
    }
}
           

用于平時自己複習回顧,如有錯誤,歡迎指正