常用算法收集

数组全排列 递归



package algorithm.test;
/**
 * 数组全排列
 * @author barney
 *
 */
public class Permutation {
	
	public static void perm(int[] num, int i) {

        if(i < num.length - 1) { 
            for(int j = i; j <= num.length - 1; j++) { 
                int tmp = num[j]; 
                // 旋转该区段最右边数字至最左边 
                for(int k = j; k > i; k--) 
                    num[k] = num[k-1]; 
                num[i] = tmp; 

                perm(num, i+1); 

                // 还原 
                for(int k = i; k < j; k++) 
                    num[k] = num[k+1]; 
                num[j] = tmp; 
            } 
        } 
        else {  // 显示此次排列 
            for(int j = 1; j <= num.length - 1; j++) 
                System.out.print(num[j] + " "); 
            System.out.println(); 
        } 
    }

    public static void main(String[] args) {
        int[] num = new int[5+1]; 

        for(int i = 1; i <= num.length - 1; i++) 
            num[i] = i; 

        perm(num, 1); 
    }

}



洗牌

package algorithm.test;
//随机洗牌算法


public class ShuffleCard {

	
	public static void main(String args[]) { 
        final int N = 52; 
        int[] poker = new int[N + 1]; 

        // 初始化阵列 
        for(int i = 1; i <= N; i++) 
            poker[i] = i; 

        // 洗牌 
        for(int i = 1; i <= N; i++) { 
            int j = (int) (Math.random() * N);

            if(j == 0)
                j = 1;

            int tmp = poker[i]; 
            poker[i] = poker[j]; 
            poker[j] = tmp; 
        } 

        for(int i = 1; i <= N; i++) { 
            // 判断花色 
            switch((poker[i]-1) / 13) { 
                case 0: 
                    System.out.print("桃"); break; 
                case 1: 
                    System.out.print("心"); break; 
                case 2: 
                    System.out.print("砖"); break; 
                case 3: 
                    System.out.print("梅"); break; 
            } 

            // 扑克牌数字 
            int remain = poker[i] % 13; 
            switch(remain) { 
                case 0: 
                    System.out.print("K "); break; 
                case 12: 
                    System.out.print("Q "); break; 
                case 11: 
                    System.out.print("J "); break; 
                default: 
                    System.out.print(remain + " "); break; 
            } 

            if(i % 13 == 0) 
                System.out.println(""); 
        } 
    } 
}


你可能感兴趣的:(算法)