Files
suanfa/c/ch2/ch2.allpai/allpai.c
T
2026-06-14 23:48:44 +08:00

31 lines
995 B
C

#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;
}