二分查找的方法
二分查找的方法:在有序列表中每次和中间元素进行比较大小,如果大了则排除大的一半元素继续比较,反之亦然。
二分查找的优势
100个元素7次之内找到,24万单词18步就找到了,简单查找最多需要n次,二分查找最多需要log2n步。
实现:
1、java实现:
public class BinarySearchDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] myList = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
System.out.println("3的位置是:" + binarySearch(myList, 3));
System.out.println("17的位置是:" + binarySearch(myList, 17));
}
private static int binarySearch(int[] myList, int i) {
// TODO Auto-generated method stub
int low = 0;
int high = myList.length - 1;
int mid = 0;
int guess = 0;
while( low <= high) {
mid = (low + high) / 2;
guess = myList[mid];
if(guess == item
) {
return mid;
}
if(guess > item) {
high = mid - 1;
}else {
low = mid + 1;
}
}
return -1;
}
}
得到的结果是3的位置是1, 17的位置是8
2、Python实现
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high)//2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
my_list = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print binary_search(my_list, 3)
print binary_search(my_list, 17)
得到的结果是3的位置是1,17的位置是8