美文网首页算法&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