java完美洗牌问题,求大神解答

完美洗牌。有n 张不同的牌(n为偶数),假设有一个洗牌高手,总是能将这n张牌分成相同数量的左右两叠,并且按照左右各一张的次序重新洗牌,一般洗牌若干次后,牌局能恢复原状。例如,假设有8张牌,编号为1~8,则洗牌的过程为:
1 2 3 4 5 6 7 8
1 5 2 6 3 7 4 8
1 3 5 7 2 4 6 8
1 2 3 4 5 6 7 8
说明经过3次洗牌后恢复原状。编程,输入偶数n,2≤n≤1024,若经过若干次洗牌恢复原状,则输出洗牌的次数;若洗牌2000次以上还不能恢复原状,则输出2000;如果输入非法数据,则输出0。例如输入8,输出3;输入52,输出8。

先定义一个数组存放你要放置的牌的数量,再定义两个数组存放洗牌分成对等的两份,然后再让初始的数组从这两个数组读取内容,循环,直到完成完美洗牌

 var arr=new Array(1,2,3,4,5,6,7,8) //原始数组
        var arr0=arr;                       //定义一个数组存储原始数组
        var arr1=new Array;                 //存储完美洗牌的前半段
        var arr2=new Array; //存储完美洗牌的后半段




        var j=0;
        //1.洗牌,将牌堆分为完美的两堆
        for (var i=0;i<arr.length;i++) {

            if(i<arr.length/2){
            arr1[i]=arr[i];
            }
            else{
            arr2[j]=arr[i];
            j+=1;
            }
        }
        j=0;

        //2.将两堆排完美混合在一起,完成第一次洗牌
        for (var i=0;i<arr0.length/2;i++) {
            arr[j]=arr1[i];
            j+=1;
            arr[j]=arr2[i];
            j+=1;
        }

对数组的初始化什么的我就不写了,
你只要重复执行一和二 执行完一次加一个判断是否和原数组相同就可以得出结果了,