完美洗牌算法

/*=============================================*\
完美洗牌算法:
有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},
但愿排序后{a1,b1,a2,b2,....,an,bn},
要求时间复杂度o(n),空间复杂度0(1)。
\*=============================================*/
public class Pshuffle {
    public static void main(String[] args) {
        shuffle(8);
    }
    public static char[] shuffle(int count) {
        char[] arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
        return shuffle(arr, count);
    }
    public static char[] shuffle(char[] arr, int count) {
        for (int i = 0; i < count; i++) {
            int index = arr.length / 2;
            char temp = arr[index];
            while (index != 1) {
                int tempIndex = (index + (index % 2) * (arr.length - 1)) / 2;
                arr[index] = arr[tempIndex];
                index = tempIndex;
            }
            arr[1] = temp;
            System.out.println(arr);
        }
        return arr;
    }
}

//附录:完美洗牌8次后回到原点java

//AaBDCFGHEJKLMgOPIRSTUVWXYZNbcdefQhijklmnopqrstuvwxyz算法

//ANaDBFGHCJKLMQOPERSTUVWXYZgbcdefIhijklmnopqrstuvwxyz数组

//AgNDaFGHBJKLMIOPCRSTUVWXYZQbcdefEhijklmnopqrstuvwxyzcode

//AQgDNFGHaJKLMEOPBRSTUVWXYZIbcdefChijklmnopqrstuvwxyz排序

//AIQDgFGHNJKLMCOPaRSTUVWXYZEbcdefBhijklmnopqrstuvwxyzclass

//AEIDQFGHgJKLMBOPNRSTUVWXYZCbcdefahijklmnopqrstuvwxyz原理

//ACEDIFGHQJKLMaOPgRSTUVWXYZBbcdefNhijklmnopqrstuvwxyzstatic

//ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz时间

//最近看老千的千术,提到完美洗牌,模拟了一下,呵呵while

//真爱生命,原理赌博

相关文章
相关标签/搜索