比如 有一个数组int[] array=new int[]{2,5,4,11,33,56,78,68,98,38,0,0,0,0,0,0,,0,0,0,0,0,0,0};
请问我该如何打乱这个数组    就像“洗牌”一样  如果你要问要怎样的顺序 我的回答就是无论怎样的顺序  只要达到洗牌的效果就行了   因为我们从来不知道一个临时生成的数组顺序是怎样的

解决方案 »

  1.   

    定义一个洗牌用的数组: {3,5,8,9,1,23,43,22}
    取Ai的牌移动到 (Ai+A(i+1)) % N 位置,
    应该没那么容易看出规律。
      

  2.   

          int[] array= {2,5,4,11,33,56,78,68,98,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
          int[] replace = {3,5,20,8,11,23,9,6,42,51,98,32,12,32,5,1,10,2,3,5,7,11,13,17};
          int pre = 15;
          int N = array.length;
          int p,q;
          for (int i : replace) {
            p = i % N;
            q = (pre) % N;
            array[p] += array[q];
            array[q] = array[p] - array[q];
            array[p] = array[p] - array[q];
            pre = p;
          }