Bueno, ya que me he puesto intentaré explicarte también esto (además estoy haciendo un curso de mecanografía y no me viene mal para practicar un poco

)
De todos modos, no sé de donde habrás sacado esta función pero no está muy optimizada que digamos. La forma de hacerlo es buena, pero en el bucle se desordenan aleatoriamente los 50 elementos del array aunque sólamente quieras extraer 10.
Con estos parámetros no hay mucho problema, pero piensa que si quisieses extraer 10 números aleatorios de entre 10.000 el algoritmo desordenaría los 10.000 elementos para extraer ¡¡ únicamente 10 !!, y la verdad, el rendimiento de la máquina virtual AVM1 no es tan bueno como para hacer este tipo de cosas.
Código ActionScript :
function mezclar(m, n)
{
//crea un array vacío que contendrá los números
bar = [];
//llenamos el array con los números (en este ejemplo, del 1 al 50),
//luego bar = [ 1, 2, 3, ..., 48, 49, 50 ];
for (var i = 1; i <= m; i++)
{
bar[i - 1] = i;
}
//este bucle es el que va a "barajar" los elementos del array.
for (var i = m - 1; i > 1; i--)
{
//El procedimiento consiste en ir eligiendo un elemento aleatorio del array
//e intercambiar el elemento que está en la posición i por el elemento que está
//en esa posición aleatoria. Para ello tenemos que usar la variable temporal temp,
//porque si no al escribir el valor en su nueva posición se borraría el anterior.
//Se elige un número aleatorio entre 0 y el valor de i
//Por ejemplo, piensa que ha salido el 25
alea = random(i);
//Guardamos el elemento que está en la posición que indica i,
//en el primer ciclo del bucle bar[49] = 50, en la variable auxiliar
//Esto se hace para que al sobre escribir el elemento que está en esa posición,
//podamos recuperarlo y ponerlo en el lugar que ocupa el número aleatorio
temp = bar[i];
//sobreescribimos el valor de la posición i con el valor que
//está en la posición aleatoria, con lo cual tanto el valor
//de bar[49] como el de bar[25] serían iguales (de hecho, en la
//primera vuelta, en la que el array bar todavía está ordenado,
//el valor de ambos sería 26, pero no hay problema por haber sobreescrito
//bar[49] = 50, porque lo hemos almacenado el la variable auxiliar
bar[i] = bar[alea];
//finalmente ponemos el valor de la variable auxiliar, es decir 50,
//en la posición correspondiente al número aleatorio, es decir en bar[25]
bar[alea] = temp;
//Este bucle se repite para todos los elementos del array,
//recorriéndolo desde el último elemento hasta el primero
//En resumen, al principio teníamos un array ordenado de números:
//[ 1, 2, 3, ..., 25, 26, 27, ..., 48, 49, 50 ];
//Calculamos un número aleatorio, que resultó ser el 25
//alea = 25
//Guardamos el número que está en la posición i (49) en una variable auxiliar
//(ten en cuenta que ese número es el 50 en la primera vuelta,
//porque los arrays se indexan partiendo de 0)
//[ 1, 2, 3, ..., 25, 26, 27, ..., 48, 49, 50 ];
//temp = 50
//Sobreescribimos el valor de la posición 49 con el valor aleatorio:
//[ 1, 2, 3, ..., 25, 26, 27, ..., 48, 49, 26 ];
//temp = 50
//Finalmente ponemos el valor guardado en la variable temporal
//en la posición aleatoria:
//[ 1, 2, 3, ..., 25, 50, 27, ..., 48, 49, 26 ];
//temp = 50
}
//del array desordenado, sólo se devuelven los n primeros elementos.
//en este caso, de los 50 elementos del array se devuelven los 10 primeros.
return (bar.splice(0, n));
}
miArray = mezclar(50, 10);
trace(miArray);