博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过n次循环获得n个自然数随机排序
阅读量:6833 次
发布时间:2019-06-26

本文共 1295 字,大约阅读时间需要 4 分钟。

 刚才在看到有网友问,"1到100一百个数,怎么用JS来随机打乱它们的顺序呢?"。他说的这个不就是洗牌问题嘛,想起原来自己在做一个扑克游戏的时候设计过一个高效的洗牌算法,n个自然数通过n次循环搞定(当时是54个,扑克嘛)。

    只是那个扑克牌程序是用C语言写的,不过用什么语言有什么区别呢?显然没有了,那今天就用JavaScript再实现一下。简单说明一下,洗牌算法虽然是用随机函数来排序,不过和获得随即序列大不一样。随即序列里可以有重复,不过洗牌要求处理后的随即序列元素是unique的,扑克牌能有相同的吗?所以需要先生成被排序序列来保证唯一性,假如是一个1-100的自然数数组。排序代码如下:

None.gif
<
html
>
None.gif
<
head
>
None.gif    
<
title
>JavaScript Shuffle Arithmetic
</
title
>
None.gif    
<
meta 
name
="author"
 content
="birdshome@cnblogs"
 
/>
None.gif
</
head
>
None.gif
<
body
>
ExpandedBlockStart.gif    
<
script 
language
="javascript"
>
InBlock.gif
var  sequence  =  
new  Array( 100 );
InBlock.gif
for  ( 
var  i = 0  ; i  <   100  ; i ++  )
ExpandedSubBlockStart.gif {
InBlock.gif    sequence[i]  =  i + 1 ;
ExpandedSubBlockEnd.gif}
InBlock.gifalert(Shuffle(sequence));
InBlock.gif
InBlock.gif
function  Shuffle(ary)
ExpandedSubBlockStart.gif {
InBlock.gif    
for  ( 
var  i = ary.length - 1  ; i  >=   0  ; i --  )
ExpandedSubBlockStart.gif     {
InBlock.gif         
var  v  =  parseInt(Math.random() * (i + 1 ));
InBlock.gif         
var  tmp  =  ary[v];
InBlock.gif         ary[v]  =  ary[i];
InBlock.gif         ary[i]  =  tmp;   
ExpandedSubBlockEnd.gif    }
InBlock.gif    
return  ary; 
ExpandedBlockEnd.gif}
None.gif
</
script
>
None.gif
</
body
>
None.gif
</
html
>
None.gif
    某一次排序结果为:60, 88, 2, 6, 52, 45, 37, 12, 49, 41, 68, 27, 80, 86, 100, 53, 99, 33, 57, 91, 10, 63, 50, 54, 97, 93, 30, 56, 13, 11, 23, 36, 32, 58, 72, 21, 95, 17, 18, 26, 59, 35, 90, 87, 78, 73, 77, 75, 89, 47, 28, 70, 1, 15, 66, 84, 98, 44, 4, 20, 74, 25, 76, 61, 65, 29, 38, 42, 85, 96, 34, 7, 24, 92, 22, 62, 79, 48, 14, 43, 69, 46, 94, 55, 81, 71, 82, 39, 40, 31, 8, 19, 3, 9, 83, 51, 5, 67, 16, 64。

    五行代码的算法,就不解释了。您还有更优的吗emteeth.gif

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

你可能感兴趣的文章
KVM与Xen两大虚拟化的比较
查看>>
【红帽认证参考】常见问题解答
查看>>
Poco官方PPT_000-IntroAndOverview双语对照翻译
查看>>
Poco官方PPT_010-Types双语对照翻译
查看>>
路由基础
查看>>
java二叉排序树 查找 插入 求父节点 算法
查看>>
zabbix有关网站
查看>>
Android MVC实现一个音乐播放器
查看>>
PySNMP学习笔记(一)
查看>>
Linux DHCP服务器
查看>>
[Unity] 文件夹图像资源的读取
查看>>
python发送邮件及附件
查看>>
戴志康:让我焦躁并痛苦着的O2O
查看>>
【go语言】wait,wait for me
查看>>
Kubernetes Dashboard 与DNS部署
查看>>
jquery checkbox挖坑
查看>>
测试机房网络连通性和延迟(shell脚本)
查看>>
Java反编译插件:Eclipse Class Decompiler
查看>>
You have new mail in /var/spool/mail/root
查看>>
Linux之nfs 部署和优化
查看>>