31 lines
995 B
C
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;
|
||
|
|
}
|