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

Reply via email to