#include <iostream>
void printArray(int a[], int constant_len) {
for (int i = 0; i < constant_len; i++)
std::cout << a[i] << " ";
std::cout << "\n";
}
void heapAlgorithmPermutation(int a[], int len, int constant_len) {
if (len == 1) {
printArray(a, constant_len);
return;
}
for (int i = 0; i < len; i++) {
heapAlgorithmPermutation(a, len - 1, constant_len);
if (len % 2 == 1)
std::swap(a[0], a[len - 1]);
else
std::swap(a[i], a[len - 1]);
}
}
int main() {
int arr[] = {1, 2, 3, 4};
int len = sizeof arr / sizeof arr[0];
heapAlgorithmPermutation(arr, len, len);
return 0;
}
/*
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
*/