MCPcopy Create free account
hub / github.com/QMHTMY/RustBook / gallop_right

Function gallop_right

publication/code/chapter07/tim_sort.rs:67–87  ·  view source on GitHub ↗

找到 run2 首部元素在 run1 中的位置

(key: &i32, list: &[i32], mode: Mode)

Source from the content-addressed store, hash-verified

65
66// 找到 run2 首部元素在 run1 中的位置
67fn 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// 跳跃式模糊查找,确定位置
90fn gallop(key: &i32, list: &[i32], mode: Mode) -> (usize, usize) {

Callers 2

merge_sortFunction · 0.85
mergeMethod · 0.85

Calls 2

gallopFunction · 0.85
lenMethod · 0.45

Tested by

no test coverage detected