1. 程式人生 > >劍指Offer-陣列全排列

劍指Offer-陣列全排列

1 2 3 4

第一位

  • 1不動      1 -》2 3 4的全排
  • 1,2置換   2-》1 3 4的全排
  • 1,3置換   3-》2 1 4的全排
  • 1,4置換   4-》2 3 1的全排

第二位,第三位。。依次類推

注意每次換回去要再換回來

import java.util.Arrays;
//陣列全排列 Evan XU-TJU
class AllSort{
    public static void main(String[] args) {
        int array[] = {1, 2, 3,4};
        allSort(array,0,array.length-1);
    }
    public static void allSort(int array[],int start,int end){
        if (start>=end){
            //ToDo
            System.out.println(Arrays.toString(array));
            return;
        }
        allSort(array,start+1,end); //保持不動
        for (int i = start+1; i <=end ; i++) {
            swap(array, start, i);  //分別交換
            allSort(array,start+1,end); //後面的繼續排列
            swap(array,start,i);    //交換再換回來
        }
    }
    public static void swap(int array[],int i,int j){
        int tmp = array[i];
        array[i] = array[j];
        array[j]=tmp;
    }
}

[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]


執行結果: