2015-11-18 06:14:39 +00:00
|
|
|
use rand::Rng;
|
|
|
|
|
|
|
|
|
|
extern crate rand;
|
2014-01-17 05:32:22 +00:00
|
|
|
|
|
|
|
|
fn knuth_shuffle<T>(v: &mut [T]) {
|
2015-11-18 06:14:39 +00:00
|
|
|
let mut rng = rand::thread_rng();
|
2014-01-17 05:32:22 +00:00
|
|
|
let l = v.len();
|
|
|
|
|
|
2015-11-18 06:14:39 +00:00
|
|
|
for n in 0..l {
|
2014-01-17 05:32:22 +00:00
|
|
|
let i = rng.gen_range(0, l - n);
|
|
|
|
|
v.swap(i, l - n - 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
2015-11-18 06:14:39 +00:00
|
|
|
let mut v: Vec<_> = (0..10).collect();
|
2014-01-17 05:32:22 +00:00
|
|
|
|
|
|
|
|
println!("before: {:?}", v);
|
2015-11-18 06:14:39 +00:00
|
|
|
knuth_shuffle(&mut v);
|
2014-01-17 05:32:22 +00:00
|
|
|
println!("after: {:?}", v);
|
|
|
|
|
}
|