File tree 2 files changed +27
-0
lines changed
2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change
1
+ use std:: time:: { SystemTime , UNIX_EPOCH } ;
2
+
3
+ use crate :: math:: PCG32 ;
4
+
5
+ const DEFAULT : u64 = 4294967296 ;
6
+
7
+ fn gen_range ( range : usize , generator : & mut PCG32 ) -> usize {
8
+ generator. get_u64 ( ) as usize % range
9
+ }
10
+
11
+ pub fn fisher_yates_shuffle ( array : & mut [ i32 ] ) {
12
+ let seed = match SystemTime :: now ( ) . duration_since ( UNIX_EPOCH ) {
13
+ Ok ( duration) => duration. as_millis ( ) as u64 ,
14
+ Err ( _) => DEFAULT ,
15
+ } ;
16
+
17
+ let mut random_generator = PCG32 :: new_default ( seed) ;
18
+
19
+ let len = array. len ( ) ;
20
+
21
+ for i in 0 ..( len - 2 ) {
22
+ let r = gen_range ( len - i, & mut random_generator) ;
23
+ array. swap ( i, i + r) ;
24
+ }
25
+ }
Original file line number Diff line number Diff line change 1
1
mod convex_hull;
2
+ mod fisher_yates_shuffle;
2
3
mod hanoi;
3
4
mod huffman_encoding;
4
5
mod kmeans;
5
6
mod nqueens;
6
7
mod two_sum;
7
8
8
9
pub use self :: convex_hull:: convex_hull_graham;
10
+ pub use self :: fisher_yates_shuffle:: fisher_yates_shuffle;
9
11
pub use self :: hanoi:: hanoi;
10
12
pub use self :: huffman_encoding:: { HuffmanDictionary , HuffmanEncoding } ;
11
13
pub use self :: kmeans:: f32:: kmeans as kmeans_f32;
You can’t perform that action at this time.
0 commit comments