parent
9a3f621f4a
commit
a4642a2218
@ -1,4 +1,86 @@
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cloudabi"
|
||||
version = "0.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fuchsia-zircon"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fuchsia-zircon-sys"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "imposters"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.42"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[metadata]
|
||||
"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789"
|
||||
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
|
||||
"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
|
||||
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
|
||||
"checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1"
|
||||
"checksum rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6802c0e883716383777e147b7c21323d5de7527257c8b6dc1365a7f2983e90f6"
|
||||
"checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2"
|
||||
"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd"
|
||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
authors = ["Jason Staten <jstaten07@gmail.com>"]
|
||||
name = "imposters"
|
||||
version = "0.1.0"
|
||||
authors = ["Jason Staten <jstaten07@gmail.com>"]
|
||||
|
||||
[dependencies]
|
||||
rand = "0.5.3"
|
||||
|
@ -0,0 +1,47 @@
|
||||
#![allow(unused)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
extern crate rand;
|
||||
use super::bubble;
|
||||
use super::insertion;
|
||||
use super::selection;
|
||||
use ch07_algorithms::bench::rand::Rng;
|
||||
|
||||
extern crate test;
|
||||
use test::{black_box, Bencher};
|
||||
|
||||
fn generate_data() -> Vec<u32> {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut v = vec![0u32; 1000];
|
||||
for x in v.iter_mut() {
|
||||
*x = rng.gen();
|
||||
}
|
||||
v
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_selection_sort(b: &mut Bencher) {
|
||||
let data = generate_data();
|
||||
b.iter(|| {
|
||||
let mut data_clone = data.clone();
|
||||
black_box(selection::selection_sort(&mut data_clone))
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bubble_sort(b: &mut Bencher) {
|
||||
let data = generate_data();
|
||||
b.iter(|| {
|
||||
let mut data_clone = data.clone();
|
||||
black_box(bubble::bubble_sort(&mut data_clone))
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_insertion_sort(b: &mut Bencher) {
|
||||
let data = generate_data();
|
||||
b.iter(|| {
|
||||
let mut data_clone = data.clone();
|
||||
black_box(insertion::insertion_sort(&mut data_clone))
|
||||
});
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
pub fn bubble_sort<T>(source: &mut [T])
|
||||
where
|
||||
T: Ord,
|
||||
{
|
||||
let mut keep_going = true;
|
||||
while keep_going {
|
||||
keep_going = false;
|
||||
for i in 0..source.len() - 1 {
|
||||
if source[i] > source[i + 1] {
|
||||
source.swap(i, i + 1);
|
||||
keep_going = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_small_sort() {
|
||||
let mut my_vec = vec![100, 42, 73, 24];
|
||||
bubble_sort(&mut my_vec);
|
||||
assert_eq!(my_vec, vec![24, 42, 73, 100])
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
pub fn insertion_sort<T>(source: &mut [T])
|
||||
where
|
||||
T: Ord,
|
||||
{
|
||||
for i in 0..source.len() {
|
||||
for j in (0..i).rev() {
|
||||
if source[j] > source[j + 1] {
|
||||
source.swap(j, j + 1);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_small_sort() {
|
||||
let mut my_vec = vec![100, 42, 73, 24];
|
||||
insertion_sort(&mut my_vec);
|
||||
assert_eq!(my_vec, vec![24, 42, 73, 100])
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
pub mod bench;
|
||||
pub mod bubble;
|
||||
pub mod insertion;
|
||||
pub mod selection;
|
@ -0,0 +1,26 @@
|
||||
pub fn selection_sort<T>(source: &mut [T])
|
||||
where
|
||||
T: Ord,
|
||||
{
|
||||
for cur_index in 0..source.len() {
|
||||
let (min_index, _) = source
|
||||
.iter()
|
||||
.enumerate()
|
||||
.skip(cur_index)
|
||||
.min_by_key(|&(_, item)| item)
|
||||
.unwrap();
|
||||
source.swap(cur_index, min_index);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_small_sort() {
|
||||
let mut my_vec = vec![100, 42, 73, 24];
|
||||
selection_sort(&mut my_vec);
|
||||
assert_eq!(my_vec, vec![24, 42, 73, 100])
|
||||
}
|
||||
}
|
Loading…
Reference in new issue