#[cfg(test)]
mod tests {
use crate::{bubble_sort, bubble_sort_cmp};
#[test]
fn sort() {
let mut data = vec![5, 4, 3, 2, 1];
bubble_sort(&mut data);
assert_eq!(data, [1, 2, 3, 4, 5]);
}
#[test]
fn sort_cmp() {
let mut data = vec![5, 4, 3, 2, 1];
bubble_sort_cmp(&mut data, |a, b| {
if a > b {
1
} else if a < b {
-1
} else {
0
}
});
assert_eq!(data, [1, 2, 3, 4, 5]);
}
}
pub fn bubble_sort<T: PartialOrd>(v: &mut [T]) {
let l = v.len() - 1;
for j in 0..l {
for i in 0..(l - j) {
if v[i] > v[i + 1] {
v.swap(i, i + 1);
}
}
}
}
pub fn bubble_sort_cmp<T, F>(v: &mut [T], f: F)
where
F: Fn(&T, &T) -> isize,
{
let l = v.len() - 1;
for j in 0..l {
for i in 0..(l - j) {
if f(&v[i], &v[i + 1]) > 0 {
v.swap(i, i + 1);
}
}
}
}