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

相关资料以及注意事项:

  • 我的LeetCode解题集GitHub地址
  • 欢迎私信或者留言交流!

算法介绍

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. 生成[0,i]范围内的随机数x(允许i等于x) 。
  3. 交换result[x],result[i]。
  4. 这样就保证了原来的数字都经过了交换。

总结心得

简单而实用的算法。

你可能感兴趣的:(【leetcode】打乱数组 - 经典洗牌算法)