#include <stdio.h>
// 交换数组中两个指定位置的元素
void swap(int arr[], int a, int b) {
    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}

// 递归生成数组的所有排列
void permutation(int arr[], int size, int n) {
    if (n == size) {// 当排列到最后一个元素时，打印当前排列
        for (int i = 0; i < size; i++) {
            printf("%d ", arr[i]); // 打印当前排列
        }
        printf("\n"); // 换行
    } else {//将每个元素放在当前位置n，并递归排列剩下的元素
        for (int i = n; i < size; i++) {
            swap(arr, i, n); // 交换第i和n个元素，固定第n个位置的元素
            permutation(arr, size, n + 1); // 递归处理下一个位置
            swap(arr, i, n); // 恢复原顺序，准备下一个交换
        }
    }
}

int main() {
    int arr[] = {1,2,3, 4}; // 初始数组
    int size = sizeof(arr) / sizeof(arr[0]); 
    permutation(arr, size, 0);
    return 0;
}
