File tree Expand file tree Collapse file tree 1 file changed +8
-20
lines changed Expand file tree Collapse file tree 1 file changed +8
-20
lines changed Original file line number Diff line number Diff line change 1
- use std:: cmp:: { PartialEq , PartialOrd } ;
2
-
3
- pub fn binary_search < T : PartialEq + PartialOrd > ( item : & T , arr : & [ T ] ) -> Option < usize > {
4
- if arr. is_empty ( ) {
5
- return None ;
6
- }
1
+ use std:: cmp:: Ordering ;
7
2
3
+ pub fn binary_search < T : Ord > ( item : & T , arr : & [ T ] ) -> Option < usize > {
8
4
let mut left = 0 ;
9
- let mut right = arr. len ( ) - 1 ;
5
+ let mut right = arr. len ( ) ;
10
6
11
7
while left < right {
12
8
let mid = left + ( right - left) / 2 ;
13
9
14
- if & arr[ mid] > item {
15
- right = mid - 1 ;
16
- } else if & arr[ mid] < item {
17
- left = mid + 1 ;
18
- } else {
19
- left = mid;
20
- break ;
10
+ match item. cmp ( & arr[ mid] ) {
11
+ Ordering :: Less => right = mid,
12
+ Ordering :: Equal => return Some ( mid) ,
13
+ Ordering :: Greater => left = mid + 1 ,
21
14
}
22
15
}
23
-
24
- if & arr[ left] == item {
25
- Some ( left)
26
- } else {
27
- None
28
- }
16
+ None
29
17
}
30
18
31
19
#[ cfg( test) ]
You can’t perform that action at this time.
0 commit comments