То, что ты описал - это и есть алгоритм
Если слово в слово переложить это в AS, то получиться:

Код:
// возвращает индексы ненулевых значений массива aaa в случайном порядке
var aaa = new Array(1, 0, 1, 0, 0, 0, 1, 0, 0, 1);
var flag;
function selectN() {
var k, n = random(aaa.length);
for (var i = 0; i<aaa.length; i++) {
k = (n+i)%aaa.length;
if (aaa[k]) {
break;
}
}
aaa[k] = 0;
flag = i == aaa.length ? 0 : 1;
return flag ? k : -1;
}
trace(selectN());
trace(selectN());
trace(selectN());
trace(selectN());
trace(selectN());
Конечно это еще можно оптимизировать (если надо).....