#if !efun_defined(shuffle)
/**
 * This method randomizes an array.  It places all the elements of an
 * array back in random order.
 * @param args the array to shuffle
 * @return the randomized array
 * @see roll_MdN()
 * @see efun::random()
 */
mixed shuffle( mixed arr ) {
    int i, j, sz;
    mixed tmp;
    if( !pointerp( arr ) )
        return ({ });
    if( ( sz = sizeof( arr ) ) < 2 )
        return arr;
    for( i = 0; i < sz; i++ ) {
       if ( i == ( j = random( i + 1 ) ) )
           continue;
       tmp = arr[ i ];
       arr[ i ] = arr[ j ];
       arr[ j ] = tmp;
    }
    return arr;
} /* shuffle() */
#endif