洗牌算法
2015-07-29 21:56
302 查看
牌放到一个数组中,这里采用随机取下标的方式,交换两张牌。
将数组分为两个部分,一个部分为洗好的牌,和没有洗好的牌。从没有洗好的牌中随机选一张和没有洗好的第一张牌进行交换。这样洗好的牌数量加1,没有洗好的牌数量减1
时间复杂度O(n),空间复杂度O(1)
分析算法需要从空间复杂度和时间复杂度进行分析,这样算法性能才具有可比性
将数组分为两个部分,一个部分为洗好的牌,和没有洗好的牌。从没有洗好的牌中随机选一张和没有洗好的第一张牌进行交换。这样洗好的牌数量加1,没有洗好的牌数量减1
时间复杂度O(n),空间复杂度O(1)
import java.util.Date; import java.util.Random; /** * 模拟洗牌 * 洗牌算法的实现 * 随机取下标 * 将牌分为两个部分,0-i为洗好的牌,i+1 - 53为没有洗的牌 * i+1 - 53之间产生一个随机数index,交换i+1和index的牌 * 时间复杂度O(N),空间复杂度O(1) * @author GXF * */ public class MixUpCards { /** * 洗牌 * 时间复杂度O(N),空间复杂度O(1) * @param array */ public void mixupCards(int array[]){ Random random = new Random(new Date().getTime()); for(int i = array.length - 1; i > 0; i--){ int index = random.nextInt(i); swap(array, i, index); } } /** * 交换数组元素 * @param array * @param i * @param j */ public void swap(int array[], int i, int j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } }
分析算法需要从空间复杂度和时间复杂度进行分析,这样算法性能才具有可比性
相关文章推荐
- A Bug's Life
- 并查集
- PHP自定义安装
- ADO的七个对象和4个数据集合
- php设计模式入门-注册表模式
- hdu 1166
- 基础线程知识
- 使用Matlab对灰度图像编程实现2D的傅里叶变换
- UILabel
- IDEA14.X环境下Java Web项目的创建
- 软件测试面试题—选择题2
- Hangman Judge
- 回环打印
- C#关于使用正则表达式解析字符串
- vector\list\deque的选取
- 无限互联学习心得(三)
- 4K 蓝光影片规范出炉,定名 Ultra HD Blu-ray
- 覆盖实例
- 【事件驱动】【蓝牙控制车锁或电灯】初步方案
- 类中用于比较两对象的方法的原型 及ios_base用法