public class MyClass {
public static void printArray(Integer[] arr) {
for (Integer n : arr) {
System.out.print(n + " ");
}
System.out.println();
}
public static void swap(Integer arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void heapAlgorithmPermutation(Integer[] arr, int len, int constant_len) {
if (len == 1) {
printArray(arr);
return;
}
for (int i = 0; i < len; i++) {
heapAlgorithmPermutation(arr, len - 1, constant_len);
if (len % 2 == 1)
swap(arr, 0, len - 1);
else
swap(arr, i, len - 1);
}
}
public static void main(String args[]) {
Integer[] arr = {1, 2, 3, 4};
heapAlgorithmPermutation(arr, arr.length, arr.length);
}
}
/*
run:
1 2 3 4
2 1 3 4
3 1 2 4
1 3 2 4
2 3 1 4
3 2 1 4
4 2 3 1
2 4 3 1
3 4 2 1
4 3 2 1
2 3 4 1
3 2 4 1
4 1 3 2
1 4 3 2
3 4 1 2
4 3 1 2
1 3 4 2
3 1 4 2
4 1 2 3
1 4 2 3
2 4 1 3
4 2 1 3
1 2 4 3
2 1 4 3
*/