Add bubble sort

main
sgoudham 3 years ago
parent e05db3b027
commit 593565c489

@ -0,0 +1,9 @@
[package]
name = "sorting"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "0.8.4"

@ -0,0 +1,35 @@
pub mod bubble_sort {
pub fn sort(vec: &mut Vec<usize>) {
for outer in (0..vec.len()).rev() {
for inner in 0..outer {
if vec[inner] > vec[inner + 1] {
super::swap(vec, inner, inner + 1);
}
}
}
}
}
fn swap(vec: &mut Vec<usize>, index_one: usize, index_two: usize) {
let temp = vec[index_two];
vec[index_two] = vec[index_one];
vec[index_one] = temp;
}
#[cfg(test)]
mod lib_tests {
use super::*;
#[test]
fn can_swap_numbers() {
// Arrange
let mut vec = vec![1, 2];
// Act
swap(&mut vec, 0, 1);
// Assert
assert_eq!(vec[0], 2);
assert_eq!(vec[1], 1);
}
}

@ -0,0 +1,18 @@
use rand::seq::SliceRandom;
use sorting;
use rand::thread_rng;
#[test]
fn bubble_sort_ascending() {
// Arrange
let mut vec: Vec<usize> = (0..20).rev().collect();
vec.shuffle(&mut thread_rng());
// Act
sorting::bubble_sort::sort(&mut vec);
// Assert
for i in 0..20 {
assert_eq!(vec[i], i);
}
}
Loading…
Cancel
Save