简单查找
- 查找某个元素是否在数组(长度为$n$)中、或者在数组的哪个位置,挨个把数组的每个元素都找一遍,找到目标元素。最糟的情况下,需要找$n$次,运行时间为$O(n)$
 
以简单法猜1~30以内的数:
graph TD;
    1-->|太小|2;
    2-->|太小|3;
    3-->|太小|4;
    4-->|太小|5;
    5-->|太小|(...);
    (...)-->|太小|29;
    29-->|太小|30;
二分查找
- 一种算法
 - 快速查找有序元素列表中的符合条件的元素
 
以二分法猜1~30以内的数:
graph TD;
    15-->|太大|7;
    15-->|太小|22;
    7-->|太大|3;
    7-->|太小|11;
    3-->|太大|1;
    3-->|太小|5;
    1-->|太小|2;
    5-->|太大|4;
    5-->|太小|6;
    11-->|太大|9;
    11-->|太小|13;
    9-->|太大|8;
    13-->|太大|12;
    13-->|太小|14;
    22-->|太大|18;
    22-->|太小|26;
    18-->|太大|16;
    18-->|太小|20;
    16-->|太小|17;
    20-->|太大|19;
    20-->|太小|21;
    26-->|太大|24;
    26-->|太小|28;
    24-->|太大|23;
    24-->|太小|25;
    28-->|太大|27;
    28-->|太小|29;
$2^5=32>30$,最多只需要猜5步就好啦。
运行时间
- 对于包含$n$个元素的列表,用二分查找最多需要$\log_2{n}步$
 - 二分查找的运行时间为对数时间 $O(\log{n})$
 - 而普通查找的运行时间为线性时间 $O(n)$
 
1  | import math  | 
例子:
1  | my_lst = [1, 3, 4, 5, 9]  |