View difference between Paste ID: ZCx7Fkwq and T6PFerbX
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/env perl
2
3
use warnings;
4
use strict;
5
6
my @data = (1,2,3);
7
my $trials = 1000000;
8
9
my %results;
10
11
my $shuffler = \&shuffle_listutil;
12
#my $shuffler = \&shuffle_naive;
13
#my $shuffler = \&shuffle_kfy;
14
15
for (1..$trials) {
16
	$results{join '', $shuffler->(@data)}++;
17
}
18
19
for my $result (sort keys %results) {
20
	printf "%10s %.02f%%\n", $result, $results{$result}/$trials*100;
21
}
22
23
sub shuffle_listutil {
24
	require List::Util;
25
	return List::Util::shuffle(@_);
26
}
27
28
sub shuffle_naive {
29
	my @data = @_;
30
	for my $i (0..$#data) {
31
		my $n = int(rand($#data+1));
32-
        ($data[$i], $data[$n]) = ($data[$n], $data[$i]);
32+
		($data[$i], $data[$n]) = ($data[$n], $data[$i]);
33
	}
34
	return @data;
35
}
36
37
sub shuffle_kfy {
38
	my @data = @_;
39
	for my $i (0..$#data) {
40
		my $n = int(rand($#data-$i+1))+$i;
41-
        ($data[$i], $data[$n]) = ($data[$n], $data[$i]);
41+
		($data[$i], $data[$n]) = ($data[$n], $data[$i]);
42
	}
43
	return @data;
44
}
45