Searching Algorithms: Binary Search
. 前言
该博客用于本弱鸡复习巩固,打牢基础,还望各大佬不吝赐教。
. 基本思路
思路很简单,不再赘述。
前提要求是 待查找数组必须有序!
. 图片示例
. 算法复杂度分析
平均 | 最好 | 最坏 |
---|---|---|
O(logn) | O(1) | O(logn) |
--- | 第一次就找到 | 查找失败 lon2n+1 次 |
. 代码实现
1import java.util.Arrays;
2
3/**
4 * BinarySearch 二分查找/折半查找
5 * 前提要求是 待查找数组必须有序!
6 *
7 * 算法复杂度分析
8 * * 时间复杂度(平均) O(logn)
9 * * 时间复杂度(最坏) O(logn) 找到或者查找失败 log2n+1 次
10 * * 时间复杂度(最好) O(1) 第一次就找到
11 */
12public class BinarySearch {
13
14 public static void main(String[] args) {
15
16 int[] a = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
17 System.out.println(Arrays.toString(a));
18
19 int key = 10;
20
21 int index = binarySearch(key, a);
22
23 System.out.println(index);
24 }
25
26 public static int binarySearch(int key, int[] a) {
27 int mid;
28 int start = 0;
29 int end = a.length - 1;
30 /*保证角标不越界*/
31 while (start <= end) {
32 mid = (start + end) / 2;
33 if (key < a[mid]) {
34 end = mid - 1;
35 } else if (key > a[mid]) {
36 start = mid + 1;
37 } else {
38 return mid;
39 }
40 }
41 return -1;
42 }
43
44}