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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
mod bubble_sort;
pub use bubble_sort::*;
mod select_sort;
pub use select_sort::*;
mod insert_sort;
pub use insert_sort::*;
pub trait Sort<T: core::cmp::PartialOrd + Clone> {
fn from_vec(array: Vec<T>) -> Self;
fn inner(&self) -> Vec<T>;
fn sort_by<F>(&mut self, f: F)
where
F: FnOnce(&T, &T) -> bool + core::marker::Copy;
fn sort(&mut self) {
self.sort_by(|v1, v2| v1 < v2);
}
fn is_sort(&self) -> bool {
self.is_sort_by(|v1, v2| v1 < v2)
}
fn is_sort_by<F>(&self, f: F) -> bool
where
F: FnOnce(&T, &T) -> bool + core::marker::Copy,
{
let array = self.inner();
if array.is_empty() {
return true;
}
for idx in 0..array.len() - 1 {
if !f(&array[idx], &array[idx + 1]) {
return false;
}
}
true
}
}