我有这个代码从1到12生成12个数字,然后排序算法在打印矩阵中的每个步骤时对其进行排序。
一切都很好,但我需要从1到12不重复的随机数。
知道我该怎么做?
var a = new Array(12);
var i,j,k,key;
for (j=0; j<12; j++){
a[j]=Math.floor(Math.random()*(13-1)+1);
}
document.write("Numbers:");
document.write("<TABLE align=center border=0><TR>");
for (j=0; j<12; j++){
document.write("<TD align=right width=20>",a[j],
"</TD>");
}
document.write("</TR></TABLE><CENTER><HR></CENTER>")
for (j=1; j<12; j++){
key = a[j]; i=j-1;
while (i>=0 && a[i]>key){
a[i+1] = a[i]; i--
}
a[i+1] = key;
document.write("<TABLE align=center border=0><TR>");
for (k=0; k<12; k++){
if (i<k && k<=j){
document.write("<TD align=right width=20>",
"<FONT COLOR=#ff3333>",a[k],"</FONT></TD>");}
else{
document.write("<TD align=right width=20>",
a[k],"</TD>");}
}
document.write("</TR></TABLE>")
}
答案 0 :(得分:0)
您可以创建十二个数字的数组:
var nums = [1,2,3,4,5,6,7,8,9,10,11,12];
// or
var nums = [],
max = 12;
for (var i = 1; i <= max; i++)
nums.push(i);
然后随意洗牌:
nums.sort(function(a,b){ return Math.random() - 0.5; });
从传递给.sort()
的回调中返回一个随机数是一种黑客行为,但它适用于临时用途,其中包括真正随机排序的代码会过度杀伤。
答案 1 :(得分:0)
答案 2 :(得分:-1)
这是一个代码,它使用1到12的值填充数组,然后随机地对它们进行随机播放。
var list = [];
for(var i=1; i<=12; i++) {
list.push(i);
}
for(var i=0; i<12; i++) {
var index = Math.floor(Math.random() * 12);
var tmp = list[i];
list[i] = list[index];
list[index] = tmp;
}
这是一个有效的例子:http://jsfiddle.net/k2jh2/