php实现简单洗牌算法
<?php
/**
* 简单洗牌算法
*/
$card_num=54; //牌数
print_r(wash_card($card_num));
function wash_card($card_num)
{
$cards=$tmp=array();
for($i=0;$i<$card_num;$i++){
$tmp[$i]=$i;
}
for($i=0;$i<$card_num;$i++){
$index=rand(0,$card_num-$i-1);
$cards[$i]=$tmp[$index];
unset($tmp[$index]);
$tmp=array_values($tmp);
}
return $cards;
}
?>
相关推荐
-
javascript数组随机排序实例分析
本文实例讲述了javascript数组随机排序实现方法.分享给大家供大家参考.具体如下: 我们就测试0-9的随机排序,先生成数据 var arr=[9,3,1,2,5,8,4,7,6,0]; arr.sort(); document.write("正常排序后的数组元素:"+arr.join(",")+"<BR />"); 正常排序后的数组元素:0,1,2,3,4,5,6,7,8,9 定义一个随机函数,随机返回正数或者负数,sort函数
-
JavaScript实现数组随机排序的方法
本文实例讲述了JavaScript实现数组随机排序的方法.分享给大家供大家参考.具体实现方法如下: function Shuffle(o) { for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); return o; }; 使用方法: var testArray = [1,2,3,4,5]; Shuffle(testArray); // jQuery
-
基于php实现随机合并数组并排序(原排序)
最近做了一个项目,其中有这样一个需求要实现,原有帖子列表A,现在需要在A中推广新业务B,那么需要在A列表中1:1混合B中的数据,随机混合,但是需要保持A和B两列原来的数据排序,具体详情请看下文. 原理 获知总共元素数量N: for循环N次,取随机数: 根据随机数依次从头获取A或B的值,推入新数组中: 代码: //随机合并两个数组元素,保持原有数据的排序不变(即各个数组的元素在合并后的数组中排序与自身原来一致) function shuffleMergeArray() { $mergeArray
-
php数组随机排序实现方法
本文实例讲述了php数组随机排序实现方法.分享给大家供大家参考.具体实现方法如下: <?php $array = array('A','2','3','4','5','6','7','8','9','10','J','Q','K'); shuffle($array); //随机排序数组 print_r($array); //输出数组 ?> 运行结果如下: Array ( [0] => Q [1] => 3 [2] => 5 [3] => 2 [4] => 10 [
-
javascript随机之洗牌算法深入分析
洗牌算法是我们常见的随机问题,在玩游戏.随机排序时经常会碰到.它可以抽象成这样:得到一个M以内的所有自然数的随机顺序数组. 在百度搜"洗牌算法",第一个结果是<百度文库-洗牌算法>,扫了一下里面的内容,很多内容都容易误导别人走上歧途,包括最后用链表代替数组,也只是一个有限的优化(链表也引入了读取效率的损失). 该文里的第一种方法,可以简单描述成:随机抽牌,放在另一组:再次抽取,抽到空牌则重复抽."抽到空牌则重复抽"这会导致后面抽到空牌的机会越来越大,显然
-
JavaScript学习笔记之数组随机排序
推荐阅读:JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组的增.删.改.查 JavaScript中提供了sort()和reverse()方法对数组项重新排序.但很多时候这两个方法无法满足我们实际业务的需求,比如说扑克牌游戏中的随机洗牌. 在这篇文章一起来学习如何完成上面这个示例的效果,以及一些有关于数组随机排序的相关知识. 在网上查了一下有关于数组随机排序的相关资料,都看到了Math.random()的身影.打开浏览器控制器,输入: Math.random() 从图
-
C#实现对数组进行随机排序类实例
本文实例讲述了C#实现对数组进行随机排序类.分享给大家供大家参考.具体如下: 这个一个扩充C#随机数发生器的类,可以随机生成指定范围的数字,可以随机对数组进行排序,非常好用 using System; namespace DotNet.Utilities { /// <summary> /// 使用Random类生成伪随机数 /// </summary> public class RandomHelper { //随机数对象 private Random _random; #reg
-
C#实现洗牌算法
C#洗牌算法,简单演示! /// <summary> /// 洗牌算法 /// </summary> private void test() { int[] iCards = new int[54]; for (int i = 0; i < iCards.Length; i++) { iCards[i] = i + 1; } // Random rand = new Random(); int iTarget = 0, iCardTemp = 0; for (int i =
-
JS随机洗牌算法之数组随机排序
推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列.举例来说,我们有一个如下图所示的数组,数组长度为 9,数组内元素的值顺次分别是 1~9: 从上面这个数组入手,我们要做的就是打乱数组内元素的顺序: 代码实现 维基百科上的 Fisher–Yates shuffle 词条对洗牌算法做了详细介绍,下面演示的算法也是基于其中的理论编写的: A
-
php实现简单洗牌算法
如下所示: 复制代码 代码如下: <?php /** * 简单洗牌算法 */ $card_num=54; //牌数 print_r(wash_card($card_num)); function wash_card($card_num) { $cards=$tmp=array(); for($i=0;$i<$card_num;$i++){ $tmp[$i]=$i; } for($i=0;$i<$card_num;$i++){
-
shell实现Fisher–Yates shuffle洗牌算法介绍
目录 Fisher-Yates shuffle 算法简介 shell实现 本文介绍使用shell语法实现Fisher–Yates shuffle 洗牌算法. Fisher-Yates shuffle 算法简介 Fisher–Yates shuffle 洗牌算法可以用于对数组进行随机排列,它的时间复杂度为O(n),伪代码如下: To shuffle an array a of n elements (indices 0..n-1): for i from n - 1 downto 1 do j =
-
JavaScript随机打乱数组顺序之随机洗牌算法
假如有一个数组是这样子: var arr1 = ["a", "b", "c", "d"]; 如何随机打乱数组顺序,也即洗牌. 有一个比较广为传播的简单随机算法: function RandomSort (a,b){ return (0.5 - Math.random()); } 实际证明上面这个并不完全随机. 随便一搜网上太多这种东西了,看一下stackoverflow上的一个高分回答,答案出自github上. knuth-s
-
Java模拟扑克牌洗牌实现生成52张扑克的方法示例
本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法.分享给大家供大家参考,具体如下: 要求: 生成52张扑克,模拟扑克牌洗牌,并输出. 实现代码: package com.NCU.ZHANGhuirong; import java.util.ArrayList; import java.util.Collections; public class Card { public String poker(int num) { String str = ""; String[] f
-
C#实现洗牌游戏实例
棋牌类游戏是目前比较火的游戏之一.今天本文就以实例形式实现洗牌游戏.本文实例所采用的算法是:遍历每个位置上的牌,然后与随机位置上的牌交换. 运行结果如下图所示: 对于牌来讲,2个关键的因素是面值和类型(如红桃.梅花等). 代码如下: public class Card { private string mianzhi; private string leixin; public Card(string m, string l) { mianzhi = m; leixin = l; } publi
-
网易有道2017内推编程题 洗牌(python)
本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下 ''' [编程题] 洗牌 时间限制:1秒 空间限制:32768K 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌, 从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆, 左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆). 接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌, 接着放下右手的倒数第二张牌,再放下左手的
-
java和js实现的洗牌小程序
这几天刚学了java和javascript,简单写了个用java和javascript的小程序 JavaScript的 // An highlighted block var colors = ['红桃','梅花','方片','黑桃'] var numbers = ['2','3','4','5','6','7','8','9','10','J','Q','K','A'] var puke = new Array(); var cards = new Array(); for (var i =
随机推荐
- XML简易教程之二
- Javascript的表单验证-初识正则表达式
- mybatis原理概述入门教程
- 用MySQL函数清除字符串首尾空白字符的方法
- javascript Table 中2个列(TD)的交换实现代码
- PHP程序中使用adodb连接不同数据库的代码实例
- PHP用strstr()函数阻止垃圾评论(通过判断a标记)
- Windows XP中轻松获取未使用的IP地址的批处理文件
- jQuery中(function(){})()执行顺序的理解
- Android实现下载zip压缩文件并解压的方法(附源码)
- PHP中的Streams详细介绍
- 打包发布Python模块的方法详解
- c#中虚函数的相关使用方法
- C++ 中二分查找递归非递归实现并分析
- python内存监控工具memory_profiler和guppy的用法详解
- vue简单练习 桌面时钟的实现代码实例
- Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决方法
- C#将Excel转成PDF的方法
- android实现文字水印效果 支持多行水印
- JS实现容器模块左右拖动效果