二分查找算法
二分查找: 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
实例:
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(3);
list1.add(5);
list1.add(7);
list1.add(8);
list1.add(10);
list1.add(11);
list1.add(15);
list1.add(16);
list1.add(21);
list1.add(31);
list1.add(67);
list1.add(109);
list1.add(233);
list1.add(999);
// 二分查找,前提是有序序列,折中查找
System.out.println(biSearch(list1, 999));
// 二分查找
public static int biSearch(List array, int x) {
int head = 0;
int end = array.size() - 1;
int middle = 0;
while (head <= end) {
System.out.println("--------------------");
System.out.println("head->"+head);
System.out.println("end->"+end);
System.out.println("middle->"+middle);
middle = (head + end) / 2;
System.out.println("取中middle->"+middle);
if ((Integer) array.get(middle) == x) {
return middle + 1;
} else if ((Integer) array.get(middle) < x) {
head = middle + 1;
} else {
end = middle - 1;
}
}
return -1;
}