找到 run2 首部元素在 run1 中的位置
(key: &i32, list: &[i32], mode: Mode)
| 65 | |
| 66 | // 找到 run2 首部元素在 run1 中的位置 |
| 67 | fn gallop_right(key: &i32, list: &[i32], mode: Mode) -> usize { |
| 68 | let (mut base, mut lim) = gallop(key, list, mode); |
| 69 | |
| 70 | while lim != 0 { |
| 71 | let ix = base + lim / 2; |
| 72 | if &list[ix] < key { |
| 73 | base = ix + 1; |
| 74 | lim -= 1; |
| 75 | } else if &list[ix] == key { |
| 76 | base = ix + 1; |
| 77 | if ix == list.len() - 1 || &list[ix + 1] > key { |
| 78 | break; |
| 79 | } else { |
| 80 | lim -= 1; |
| 81 | } |
| 82 | } |
| 83 | lim /= 2; |
| 84 | } |
| 85 | |
| 86 | base |
| 87 | } |
| 88 | |
| 89 | // 跳跃式模糊查找,确定位置 |
| 90 | fn gallop(key: &i32, list: &[i32], mode: Mode) -> (usize, usize) { |
no test coverage detected