二分法必須操作有序的元素列表
最多查詢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); } }