- script ShuffleTest -1,{
OnInit:
.@samplesize = 1000;
.@iterations = 100;
freeloop true;
.@start = gettimetick(0);
for (.@i = 0; .@i < .@iterations; ++.@i)
callfunc("Haru_shuffle", .@samplesize, .@output);
.@time = gettimetick(0) - .@start;
debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
.@start = gettimetick(0);
for (.@i = 0; .@i < .@iterations; ++.@i)
callfunc("keyworld_inf_shuffle", .@samplesize, .@output);
.@time = gettimetick(0) - .@start;
debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
.@start = gettimetick(0);
for (.@i = 0; .@i < .@iterations; ++.@i)
callfunc("modern_fisher_yates", .@samplesize, .@output);
.@time = gettimetick(0) - .@start;
debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
.@start = gettimetick(0);
for (.@i = 0; .@i < .@iterations; ++.@i)
callfunc "modern_fisher_yates_haru", .@samplesize, .@output;
.@time = gettimetick(0) - .@start;
debugmes(sprintf("time used = %0d.%02d ms", .@time/.@iterations, .@time%.@iterations));
end;
}
function script Haru_shuffle {
deletearray getarg(1);
.@count = getarg(0);
for ( .@i = 0; .@i < .@count; ++.@i ) {
do {
.@pick = rand( .@count );
} while ( .@flags[.@pick] );
set getelementofarray( getarg(1), .@i ), .@pick;
.@flags[.@pick] = 1;
}
return .@size;
}
function script keyworld_inf_shuffle {
deletearray getarg(1);
.@count = getarg(0);
.@tmp$ = "|";
for ( .@i = 0; .@i < .@count; ++.@i ) {
while ( compare( .@tmp$, "|" +( .@pick = rand( .@count ) )+ "|" ) );
set getelementofarray( getarg(1), .@i ), .@pick;
.@tmp$ += .@pick +"|";
}
return .@size;
}
function script modern_fisher_yates {
deletearray getarg(1);
.@size = .@tmpsize = getarg(0);
if ( .@size <= 0 )
return 0;
for ( .@i = 0; .@i < .@size; ++.@i )
.@array_[.@i] = .@i;
for ( .@i = 0; .@i < .@size; ++.@i ) {
.@rand = rand(.@tmpsize);
set getelementofarray( getarg(1), .@i ), .@array_[.@rand];
deletearray .@array_[.@rand], 1;
--.@tmpsize;
}
return .@size;
}
function script modern_fisher_yates_haru {
deletearray getarg(1);
.@size = .@tmpsize = getarg(0);
if ( .@size <= 0 )
return 0;
for ( .@i = 0; .@i < .@size; ++.@i )
.@array_[.@i] = .@i;
for ( .@i = 0; .@i < .@size; ++.@i ) {
.@rand = rand(.@tmpsize);
set getelementofarray( getarg(1), .@i ), .@array_[.@rand];
.@array_[.@rand] = .@array_[--.@tmpsize];
}
return .@size;
}