用C语言固定元素找位置完成递归生成整数的全排列
时间: 2024-05-15 21:16:07 浏览: 137
以下是用C语言实现固定元素找位置完成递归生成整数的全排列的代码:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void permute(int *arr, int start, int end) {
if (start == end) {
// 打印排列结果
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
}
// 固定第一个元素
for (int i = start; i <= end; i++) {
swap(&arr[start], &arr[i]);
permute(arr, start+1, end);
swap(&arr[start], &arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3, 4};
int n = sizeof(arr) / sizeof(arr[0]);
// 固定第一个元素为1,生成其他元素的排列
for (int i = 1; i < n; i++) {
swap(&arr[0], &arr[i]);
permute(arr, 1, n-1);
swap(&arr[0], &arr[i]);
}
return 0;
}
```
在这个代码中,我们首先定义了一个`swap`函数,用于交换数组中两个元素的位置。然后,我们定义了一个`permute`函数,用于生成整数的全排列。在`permute`函数中,我们使用递归的方法生成排列,每次递归固定一个元素,并将剩余元素进行排列,直到排列结束。
在`main`函数中,我们使用循环固定第一个元素为1,然后调用`permute`函数生成其他元素的排列。最终,程序会输出所有的排列结果。
阅读全文