算法之二分查找

时间:2022-10-05 11:00:47

二分查找

二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。

 假设现在需要在英文字典中查找单词*,以下有两种解决方案:
- 1、从字典的头部(尾部和头部一样,暂不考虑)开始一个一个查找;
- 2、从字典的中间开始查找,根据翻开的单词来判断你要找的单词在左半边还是右半边(字典是有序的),然后重复2;

效率

方法 时间复杂度
1 O(n)
2 O(logn)

代码

public class BinarySearchDemo {
public static void main(String[] args) {
Integer[] arr = new Integer[10];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[4] = 4;
arr[5] = 5;
arr[6] = 6;
arr[7] = 7;
arr[8] = 8;
arr[9] = 9;
Integer index = binarySearch(arr, 5);
System.out.println("索引为:" + index);
}

public static Integer binarySearch(Integer[] arr, int item) {
int low = 0; //数组第一个元素的索引
int high = arr.length - 1; //数组最后一个元素的索引
while (low <= high) { //只要范围没有缩小到只包含一个元素
int mid = (low + high) / 2; //就检查中间的元素
int guess = arr[mid];
if (guess == item) { //找到元素
return mid;
}
if (guess > item) { //猜的数字大了
high = mid - 1;
} else { //猜的数字小了
low = mid + 1;
}
}
return null; //没有指定的元素
}
}