非重复随机排序算法

时间:2014-03-10 00:02:35

标签: javascript sorting random

我有这个代码从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>")
}     

3 个答案:

答案 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()的回调中返回一个随机数是一种黑客行为,但它适用于临时用途,其中包括真正随机排序的代码会过度杀伤。

演示:http://jsfiddle.net/5hN6t/1/

答案 1 :(得分:0)

我认为您需要的只是设置种子。

看看David Bau的回答:

Seedable JavaScript random number generator

答案 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/