二分法

二分法必須操作有序的元素列表

最多查詢log2N次

/**
 * @author: krauser
 * @date: Create in 下午6:13 2017/12/27
 * @Description: 二分法 最多查詢次數log2N次
 * log((double)N)/log((double)m)
 */
public class DichotomyTest {

    /**
     * goalList必須要是有序的,這裏不做判斷了
     */
    Integer time = 0;

    public Integer getObject(List<Integer> goalList, int goalNumber) {
        if (!goalList.contains(goalNumber)) {
            System.out.println("集合不包含:" + goalNumber);
            return null;
        }
        time++;
        int midSize = goalList.size() / 2;
        if (goalList.get(midSize) < goalNumber) {
            getObject(goalList.subList(midSize + 1, goalList.size()), goalNumber);
        } else if (goalList.get(midSize) == goalNumber) {
            System.out.println("查找次數爲:" + (time - 1));
        } else {
            getObject(goalList.subList(0, midSize), goalNumber);
        }
        return null;
    }


    public static void main(String[] args) {
        List<Integer> numList = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            numList.add(i);
        }
        DichotomyTest dichotomyTest = new DichotomyTest();
        dichotomyTest.getObject(numList, 1);
    }

}

發佈了36 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章