zoukankan      html  css  js  c++  java
  • 洗牌算法

    牌放到一个数组中,这里采用随机取下标的方式,交换两张牌。

    将数组分为两个部分,一个部分为洗好的牌,和没有洗好的牌。从没有洗好的牌中随机选一张和没有洗好的第一张牌进行交换。这样洗好的牌数量加1,没有洗好的牌数量减1

    时间复杂度O(n),空间复杂度O(1)

     1 import java.util.Date;
     2 import java.util.Random;
     3 
     4 
     5 /**
     6  * 模拟洗牌
     7  * 洗牌算法的实现
     8  * 随机取下标
     9  * 将牌分为两个部分,0-i为洗好的牌,i+1 - 53为没有洗的牌
    10  * i+1 - 53之间产生一个随机数index,交换i+1和index的牌
    11  * 时间复杂度O(N),空间复杂度O(1)
    12  * @author GXF
    13  *
    14  */
    15 public class MixUpCards {
    16     
    17     /**
    18      * 洗牌
    19      * 时间复杂度O(N),空间复杂度O(1)
    20      * @param array
    21      */
    22     public void mixupCards(int array[]){
    23         Random random = new Random(new Date().getTime());
    24         
    25         for(int i = array.length - 1; i > 0; i--){
    26             int index = random.nextInt(i);
    27             swap(array, i, index);
    28         }
    29     }
    30     
    31     /**
    32      * 交换数组元素
    33      * @param array
    34      * @param i
    35      * @param j
    36      */
    37     public void swap(int array[], int i, int j){
    38         int temp = array[i];
    39         array[i] = array[j];
    40         array[j] = temp;
    41     }
    42 
    43 }

    分析算法需要从空间复杂度和时间复杂度进行分析,这样算法性能才具有可比性

  • 相关阅读:
    SCM基础之系统核心功能
    事件记录与变更请求
    SCM基础之配置管理功能
    SCM基础之好处
    SCM基础之配置管理实施
    善其事 利其器:快速制作SEO索引
    深入浅出之正则表达式(二)
    C# 读写文件方法总结
    C#常用正则式整理
    C#正则表达式类Match和Group类的理解
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4687556.html
Copyright © 2011-2022 走看看