#include // 交换数组中两个指定位置的元素 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; }