public class OrderFind { private int[] elems = { 5, 9, 34, 45, 65, 98, 145, 265 }; public static void main(String[] args) { OrderFind a = new OrderFind(); System.out.println(a.contains(145)); } public int contains(int elem) { int lowerBound = 0; int upperBound = elems.length - 1; int curIn; // 1、判断是否有元素 if (upperBound < 0) { return -1; } while (true) { // 2、取中间索引 curIn = (lowerBound + upperBound) / 2; // 3、判断 // (1)相等直接返回 if (elem == elems[curIn]) { return curIn; // (2)判断中间索引与小索引是否相等 } else if (curIn == lowerBound) {// 只有1或2个元素 if (elem != elems[upperBound]) { return -1; } } else { // (3)修改中间索引 if (elems[curIn] < elem) { lowerBound = curIn; } else { upperBound = curIn; } } } } }
?
原文:http://smallbug-vip.iteye.com/blog/2280152