Binary Search -- the idea
A vector:
AB |
CB |
CF |
DA |
DD |
DF |
DG |
EE |
FE |
FG |
FJ |
FL |
HK |
LA |
LB |
LM |
LX |
LZ |
MZ |
PA |
PX |
QQ |
QZ |
ST |
SX |
SZ |
TA |
TX |
WX |
WZ |
YA |
YX |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
Search value: t = PB
Search range: [0,32) = {0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31}
Compare middle element with t: mid = 32/2 = 16
v[16] ? t
LX < PB => t can only be in [17,32) = {17 ... 31}
New search range: [17,32) = {17 18 19 20 21 22 23 24 25 26 27 28 29 30 31}
Compare middle element with t: mid = 17 + (32-17)/2 = 24
v[24] ? t
SX > PB => t can only be in [17,24) = {17 ... 23}
New search range: [17,24) = {17 18 19 20 21 22 23}
Compare middle element with t: mid = 17 + (24-17)/2 = 20
v[20] ? t
PX > PB => t can only be in [17,20) = {17 ... 19}
New search range: [17,20) = {17 18 19}
Compare middle element with t: mid = 17 + (20-17)/2 = 18
v[18] ? t
MZ < PB => t can only be in [19,20) = {19}
New search range: [19,20) = {19}
Compare middle element with t: mid = 19 + (20-19)/2 = 19
v[19] ? t
PA < PB => t can only be in [20,20) = {}
New search range: [20,20) = {}
Note size of range is 0 - range is empty
Return false (not found)
See the entire search process in a Stillmation1
See a similar process for the found case in another Stillmation2