/*=============================================*\ 完美洗牌算法: 有個長度爲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
//真愛生命,原理賭博