用C语言编写:给定长度为len的数组arr,打印出数组元素的所有排序。 如arr[4]={3,5,2,7},则输出这4个整数的24种排列形式
时间: 2024-12-16 17:15:55 浏览: 3
在C语言中,要生成并打印数组arr所有可能的排列,可以使用递归的回溯算法,也就是著名的“全排列”问题。这里我将提供一个基础的解决方案,但请注意,由于组合总数随着数组长度呈指数增长,对于较大的输入数组,这种方法可能会非常慢。下面是简单的代码实现:
```c
#include <stdio.h>
// 用于存储当前状态的函数参数
#define MAX_LEN 6 // 可视化最大长度,根据需要修改
int arr[MAX_LEN];
int len, perm_idx; // perm_idx表示当前序列中的下一个位置
void swap(int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 排列核心函数,递归实现
void permute(int start) {
if (start == len) { // 当前子序列已形成完整排列
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = start; i < len; i++) { // 尝试将剩余元素放入当前位置
swap(start, i);
permute(start + 1); // 继续递归到下一位
swap(start, i); // 回溯,恢复原顺序
}
}
}
int main() {
len = 4;
arr[0] = 3;
arr[1] = 5;
arr[2] = 2;
arr[3] = 7;
permute(0);
return 0;
}
```
阅读全文