二元搜尋法 練習

重點:

只能使用於經過順序排列過的資料,

每次判斷都從中間位置做判斷,執行時間為 O(log n)

import com.sun.org.apache.bcel.internal.generic.BREAKPOINT;

import java.util.Arrays;
import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        int list[] = {1, 8, 6, 2, 3, 4, 56, 59, 43,};
        int ans = BinarySearch(list, 56);
        System.out.print(ans);
    }

    public static int BinarySearch(int list[], int target) {
        Arrays.sort(list);
        //設定最大 最小的index
        int low = 0;
        int high = list.length - 1;
        int mid = 0;


        while (low <= high) {
            mid = (low + high) / 2;     //每個迴圈開始都要重新設定中間位置
            if (list[mid] == target) {
                return mid;
            }
            if (list[mid] < target) {   //如果中間值比目標小,將最小位置 移到中間值的左邊
                low = mid + 1;
            } else {                    //如果中間值比目標大,將最大位置 移到中間值的右邊
                high = mid - 1;
            }
        }
        return mid;
    }


}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Lillian 的頭像
    Lillian

    安安的code日記

    Lillian 發表在 痞客邦 留言(0) 人氣()