Steven,
I'm not really sure how to compare the differences between array sorts, but
this seemed pretty straight forward.
>From what I can tell, using Math.round(Math.random()*2)-1 produced less
movement in original number position than Math.round(Math.random()).
//
// TEST
//
var array = [0,1, 2, 3, 4, 5, 6, 7, 8, 9 ];
function randomizeArray ( a ) {
// 0, 1
var na = [].concat(a).sort ( function (){ return
Math.round(Math.random()); } );
analyzeArray( na );
return na;
}
function randomizeArray2 ( a ) {
// -1, 0, 1
var na = [].concat(a).sort ( function (){ return
Math.round(Math.random()*2)-1; } );
analyzeArray( na );
return na;
}
function analyzeArray ( a )
{
var len = a.length;
var mov = new Array (len);
var med = 0;
var avg = 0; // average movement
var ttl = 0; // total movement
for ( var i = 0; i < len; i++ )
{
var num = a[i];
var dist = i-num;
mov [num] = dist;
med += dist;
ttl += Math.abs( dist );
}
avg = ttl / len;
trace('\nttl: ' + ttl + ' avg: ' + avg + ' med: ' + med + '
mov: ' + mov )
}
trace( '\n++++++++++++++++++++++++++ 1\n');
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace (randomizeArray ( array ));
trace( '\n++++++++++++++++++++++++++ 2\n');
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace (randomizeArray2 ( array ));
trace( '\n++++++++++++++++++++++++++ org\n');
trace( array ); // no change good
//
// OUTPUT
//
++++++++++++++++++++++++++ 1
ttl: 30 avg: 3 med: 0 mov: 7,0,6,2,-1,-1,0,-7,-6,0
7,1,8,4,5,3,6,0,2,9
ttl: 38 avg: 3.8 med: 0 mov: 9,-1,2,5,2,-2,1,-5,-3,-8
1,9,7,5,2,8,4,6,3,0
ttl: 22 avg: 2.2 med: 0 mov: 4,1,-1,-3,4,2,0,-2,-5,0
3,2,1,8,0,7,6,5,4,9
ttl: 12 avg: 1.2 med: 0 mov: 4,0,-2,0,-2,0,0,1,1,-2
2,1,4,3,0,5,6,9,7,8
ttl: 30 avg: 3 med: 0 mov: 7,0,4,-1,-4,4,-1,-3,-5,-1
4,1,3,8,7,6,2,0,9,5
ttl: 22 avg: 2.2 med: 0 mov: 7,0,-2,2,0,1,-3,1,-6,0
2,1,8,6,4,3,5,0,7,9
ttl: 36 avg: 3.6 med: 0 mov: 7,2,6,3,-2,0,-5,-7,-4,0
7,6,4,1,8,5,3,0,2,9
++++++++++++++++++++++++++ 2
ttl: 16 avg: 1.6 med: 0 mov: 0,5,3,-1,-3,-2,-2,0,0,0
0,4,3,5,6,2,1,7,8,9
ttl: 24 avg: 2.4 med: 0 mov: 0,0,7,1,2,-2,2,-2,-1,-7
0,1,9,5,3,7,4,8,6,2
ttl: 32 avg: 3.2 med: 0 mov: 1,8,3,0,2,-3,2,0,-4,-9
9,0,5,3,8,2,4,7,6,1
ttl: 10 avg: 1 med: 0 mov: 0,0,1,4,0,-3,0,-2,0,0
0,1,5,2,4,7,6,3,8,9
ttl: 22 avg: 2.2 med: 0 mov: 0,0,4,5,1,-1,-4,0,1,-6
0,1,6,9,5,4,2,7,3,8
ttl: 20 avg: 2 med: 0 mov: 0,2,2,-1,3,3,-5,-1,-3,0
0,6,3,1,2,8,7,4,5,9
ttl: 22 avg: 2.2 med: 0 mov: 1,6,0,0,0,4,-1,-1,0,-9
9,0,2,3,4,6,7,1,8,5
++++++++++++++++++++++++++ org
0,1,2,3,4,5,6,7,8,9
_____________________________
Jesse Graupmann
www.jessegraupmann.com
www.justgooddesign.com/blog/
_____________________________
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Steven Sacks
Sent: Monday, August 13, 2007 11:23 AM
To: [email protected]
Subject: Re: [Flashcoders] array copy with random order
> array2.sort ( function (){ return Math.round(Math.random()); } );
That's brilliant! :)
To build upon that with all 3 outcomes (-1, 0, 1), you can use:
Math.round(Math.random() * 2) - 1)
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com