完美洗牌算法

/*=============================================*\
完美洗牌算法:
有個長度爲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

//真愛生命,原理賭博

相關文章
相關標籤/搜索