调整的思想, 是后面的随机得到的值其实是更后面的值,
所以需要加一个数. 要加的数量是其前面有多少个数.
// 随机选择
function rand_select(N, n){
if (N < 0 || n < 0 || N < n) return null;
var r = [];
// 按可重复随机
for(var i=0; i<n; ++i){
var p = Math.floor(Math.random() * (N-i+1));
r.push(p);
}
// 调整
// 从后向前(避免调整后的值影响比较)
for(var j=r.length-1; j>0; --j){
var p_last=r[j];
// 从后向前(避免调整后的值影响比较)
for(var k=j-1; k>=0; --k){
if(r[k]<=p_last) ++p_last;
}
r[j]=p_last;
}
// 排序
r.sort(function (a, b) { return a - b; });
return r;
}