非重复随机排序算法
Non-repeat random for sorting algorithm
我有这段代码,生成从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>")
}
您可以创建一个包含12个数字的数组:
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()
的回调中返回一个随机数是一种hack,但它在非正式使用中工作得很好,其中包含真正随机排序的代码将是多余的。
演示:http://jsfiddle.net/5hN6t/1/
我认为你所需要做的就是设置种子。
看David Bau的回答:
可种子JavaScript随机数生成器
下面的代码用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/
相关文章:
- 在数组的 2/3 上调用自身的排序算法
- JavaScript排序算法不起作用 - 任何明显的我做错了
- 用Javascript实现了带有合并排序算法的反转计数
- 这两种数组排序算法是否会为任何输入产生不同的输出
- 何时以及为什么某些项目甚至无法在排序算法中进行比较
- 这个排序算法叫什么名字
- 对排序算法进行动画处理
- 引导表:在对列进行排序时,是否可以使列/表使用稳定的排序算法
- 选择排序算法不起作用..警告..我是新手
- Javascript中的排序算法
- 为什么这种排序算法会在浏览器之间产生不一致的结果
- 对于我的快速排序算法,我如何使它对字符串和对象也进行排序
- Javascript快速排序算法实现
- 未识别的排序算法
- JavaScript中的归并排序算法和内存问题
- 在javascript中处理字符串、数字或两者时应该使用什么排序算法
- 我正在尝试使用javascript中的选择排序算法对数组中的对象进行排序
- 模糊排序算法合并稳定性
- 更好的排序算法
- 用于解释整个整数而不是字符的字母数字排序算法- Javascript