洗牌算法

图标

豆瓜

豆瓜网

豆瓜网专栏

首发
豆瓜 图标 2020-07-20 17:29:42

小E最近在设计一款斗地主小游戏,为了保证发到玩家手中的牌具有随机性,小E必须对现实世界中的洗牌过程进行模拟。看似简单的一个问题,却难住了小E。


点评:上面即为洗牌算法的思想,其本质是对数组元素进行随机重排。数组中每个元素经过洗牌算法后落在数组某个位置上的概率是相等的,洗牌算法在牌类游戏中非常有用。我们最终将算法的时间复杂度优化到了O(n),空间复杂度优化到了O(1)。


java代码实现:


复制代码

import java.util.Random;


public class Test4 {


    public static void main(String[] args) {

        int[] datas = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,  13, 14, 15, 16, 17, 18, 19, 20};

        int[] returnDatas = shuffle(datas);

        System.out.println("nums:"+ returnDatas.length);

        for(int i = 0, length = returnDatas.length; i < length; i++) {

            System.out.print(returnDatas[i]+", ");

        }

    }

    

    public static int[] shuffle(int[] nums) {

        Random rnd = new Random();

        for(int i = nums.length-1; i > 0; i-- ) {

            int j = rnd.nextInt(i+1);

            int temp = nums[i];

            nums[i] = nums[j];

            nums[j] = temp;

        }

        return nums;

    }


}

复制代码

输出信息:


nums:20

6, 9, 18, 10, 2, 16, 7, 19, 14, 1, 12, 5, 3, 4, 17, 20, 8, 15, 13, 11,


本文由豆瓜网专栏作家 豆瓜 投稿发布,并经过豆瓜网编辑审核。

转载此文章须经作者同意,并附上出处(豆瓜网)及本页链接。

若稿件文字、图片、视频等内容侵犯了您的权益,请联系本站进行 投诉处理

相关搜索

洗牌算法
图标 图标

豆瓜

豆瓜网

豆瓜网专栏

  • 洗牌算法

    图标
    豆瓜 图标 · 今天 17:29:42 · 0浏览
  • toast.maketext 使用方法详解

    图标
    豆瓜 图标 · 今天 17:28:35 · 2浏览
  • response.setheader使用教程

    图标
    豆瓜 图标 · 今天 17:27:59 · 10浏览
  • 全部评论

    豆瓜

    豆瓜网

    豆瓜网专栏

  • 洗牌算法
  • toast.maketext 使用方法详解
  • response.setheader使用教程
  • ajaxfileupload插件
  • system.setproperty怎么使用
  • 我来说两句