Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 92d4a62

Browse files
committed
Add linear and binary search.rs
1 parent c656dc0 commit 92d4a62

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

‎labocédai/src/lib.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod simple_challenges;
22
pub mod recursion;
3+
pub mod search;
34

45
#[cfg(test)]
56
mod tests {
@@ -103,5 +104,30 @@ mod tests {
103104
assert_eq!(fibonacci(28), 317811);
104105
assert_eq!(fibonacci(35), 9227465);
105106
}
107+
108+
#[test]
109+
fn test_reverse() {
110+
assert_eq!(reverse("abcdef"), "fedcba");
111+
assert_eq!(reverse("test"), "tset");
112+
assert_eq!(reverse(""), "");
113+
}
114+
}
115+
116+
mod search {
117+
use crate::search::*;
118+
119+
#[test]
120+
fn test_linear_search() {
121+
assert_eq!(linear_search(&[7, 4, 3, 1, 5], 3), 2);
122+
assert_eq!(linear_search(&[5, 3, 2, 3, 4, 5], 6), -1);
123+
assert_eq!(linear_search(&[], 6), -1);
124+
}
125+
126+
#[test]
127+
fn test_binary_search_nums() {
128+
assert_eq!(binary_search_nums(&[1, 2, 3, 4, 5], 3), 2);
129+
assert_eq!(binary_search_nums(&[1, 2, 3, 3, 4, 5], 6), -1);
130+
assert_eq!(binary_search_nums(&[], 6), -1);
131+
}
106132
}
107133
}

‎labocédai/src/recursion.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,15 @@ pub fn fibonacci(n: usize) -> usize {
3636
return 1;
3737
}
3838
fibonacci(n - 1) + fibonacci(n - 2)
39+
}
40+
41+
pub fn reverse(s: &str) -> String {
42+
if s.len() == 0 {
43+
return s.to_owned();
44+
}
45+
let char = match s.chars().nth(0) {
46+
Some(c) => c.to_string(),
47+
None => "".to_string()
48+
};
49+
return reverse(&s[1..s.len()]) + &char
3950
}

‎labocédai/src/search.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
pub fn linear_search(nums: &[isize], target: isize) -> isize {
2+
/* takes a collection of nums and a target number to search for;
3+
returns the index or -1 if not found */
4+
for (i, num) in nums.iter().enumerate() {
5+
if num == &target {
6+
return i.try_into().unwrap();
7+
}
8+
}
9+
-1
10+
}
11+
12+
pub fn binary_search_nums(nums: &[isize], target: isize) -> isize {
13+
/* takes a collection of nums and a target number to search for;
14+
returns the index or -1 if not found */
15+
if nums.len() == 0 {
16+
return -1;
17+
}
18+
let mut left = 0;
19+
let mut right = nums.len() - 1;
20+
while left < right {
21+
let midpoint = (left + right) / 2;
22+
if nums[midpoint] == target {
23+
return midpoint.try_into().unwrap();
24+
} else if nums[midpoint] < target {
25+
right = midpoint;
26+
} else if nums[midpoint] > target {
27+
left = midpoint;
28+
}
29+
}
30+
-1
31+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /