美文网首页算法&leetocode
【leetcode】打乱数组 - 经典洗牌算法

【leetcode】打乱数组 - 经典洗牌算法

作者: BzCoder | 来源:发表于2018-12-24 11:27 被阅读13次

    相关资料以及注意事项:

    算法介绍

    Knuth-Durstenfeld Shuffle,就和洗扑克牌一样,保证原来的数字不在原有的位置上,可以用他来做随机播放音乐等等。


    算法过程

      public int[] shuffle() {
            int[] result = src.clone();
            int t ;
            for (int i = result.length - 1; i > 0; i--) {
                int x = ran.nextInt(i+1);
                t = result[i];
                result[i] = result[x];
                result[x] = t;
            }
            return result;
        }
    
    1. 倒叙循环。
    2. 生成随机数 x(x>1 && x<i)。
    3. 交换result[x],result[i]。
    4. 这样就保证了原来的数字肯定不在原来的位置上。

    总结心得

    简单而使用的算法。

    相关文章

      网友评论

        本文标题:【leetcode】打乱数组 - 经典洗牌算法

        本文链接:https://www.haomeiwen.com/subject/pdiakqtx.html